索引失效的情况

导致索引失效的案例
  1.建什么索引用什么索引,顺序也最好保持一致
  2.最佳左前缀索引名称命名(如字段name,age,city,则索引命名应该是nameAgeCity或者xxx_nameAgeCity,顺序很重要)
  3.不在索引列上做任何操作(计算,函数,or,类型转换),会导致索引失效而转向全表扫描
  4.存储引擎不能使用索引中范围条件右边的列(如name='lin' and age>25 and city='qingdao',则age后面的索引会实效)
  5.尽量使用覆盖索引(只访问索引的查询(索引列和要查询的列一致)),减少select *
  6.MySQL在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描
  7.is null,is not null 也无法使用索引
  8.like以通配符在这('%abc','%abc%')两种情况会索引实效变成全表扫描,'abc%'则不会,若要'%abc','%abc%'不失效,建议使用覆盖索引,且查询的字段要少于索引或者与索引一致,不使用select *。如为name,age,city建了索引,请这么使用:select name或者select age,或者select city或者select name,age,city。如果select name,age,city,email则会全表扫描
  9.字符串不加引号索引失效,
  10.少用or,用他来连接时索引会失效
  11.select * from A where exists (select 1 from where b.id=A.id)#当A表的数据系小于B表时,用exists优于in
  12.使用join代替子查询

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容