1.索引无法存储null值,因此where xx is null 之类的语句索引会失效
2.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)
要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引
3.对于联合索引,遵循最左匹配原则,没有使用第一个索引字段,则不会使用索引
4.like查询以%开头
5.<>、NOT、in、not exists. Order by
索引定位困难(结合我们查字典的例子去理解),执行计划此时可能更倾向于全表扫描,这类的查询条件有:<>、NOT、in、not exists;
order by:
当根据索引排序时候,select查询的字段如果不是索引,则不走索引
select email from s1 order by email desc;
特别的:如果对主键排序,则还是走索引:
select * from tb1 order by nid desc;
6.索引列数据类型不匹配
如果列类型是字符串,条件判断使用数字,例如:where column=18,则不使用索引
7.如果mysql估计使用全表扫描要比使用索引快,则不使用索引