我有一张大桌子,上面有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对索引相当挑剔。我认为IN
比OR
更聪明:
select *
from tablename
where `atype` in ('doit', 'payment');
如果那不起作用,请使用
union all
:select *
from tablename
where `atype` = 'doit'
union all
select *
from tablename
where `atype` = 'payment';