我有一张大桌子,上面有700万条记录。 (MySQL)

列像;

id | atype | textbody | ....


id是主键,类型是索引

当我跑步时

select * from tablename where `atype`='doit'


它使用类型索引。 (表中有170万个doit行)

但是当我运行这个查询

select * from tablename where `atype`='doit' or `atype`='payment'


它不使用索引。我只说possible_index是一个类型。 (表中有168个付款行)

对这种行为有什么解释吗?

如果我运行此查询;

select * from tablename where `atype`='paymentfailed' or `atype`='payment'


它使用类型索引。

所以每当我使用'doit'时,它都不会使用类型索引

最佳答案

MySQL对索引相当挑剔。我认为INOR更聪明:

select *
from tablename
where `atype` in ('doit', 'payment');


如果那不起作用,请使用union all

select *
from tablename
where `atype` = 'doit'
union all
select *
from tablename
where `atype` = 'payment';

10-08 03:59