下面几种情况下,索引是不会被使用的
(1)组合索引,查询时的条件列不是组合索引中的第一个列
例如 组合索引 (a,b),查询中使用了b作为查询条件,这时是不会用到索引的,如果用a作为查询条件,则会使用索引
(2)like查询中关键字前面带有‘%’
例如 a字段为索引,使用like查询,where a like '%xxx',这时就不会使用索引
where a like 'xxx%',这时则会使用索引
而在大量模糊查询中经常会用到 '%xxx%' 这个形式,所以建议少使用like,而使用支持中文的全文检索技术 sphinx
(3)or 中如果有字段不是索引字段,则不会使用索引
例如 a字段为索引,查询 where a='x' or b='y',虽然a是索引,但b不是,这时就不会使用索引
(4)查询字符串类型的字段时,如果值不用单引号引起来,则不使用索引
例如:a字段为字符串类型,并为索引,查询 where a=111,可以准确查询,但不会使用索引
where a='111',则会使用索引
值为数字类型时,mysql会自动包装为字符串,但如果是字符,会报错,例如:
where a=xxx,这时xxx会被看做字段名,没有此字段,就会报错