导致索引失效的案例
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代替子查询
网友评论