最左前缀法则 最终原则:尽量让SQL命中索引,提升查询性能 但是MySQL会判断,如果不走索引比走索引还要快。他就不走索引了
比如说一个联合索引 有 name,age,phone
select * from emp where n= ,a= ,p= 全部命中
select * from emp where n= ,a= 命中两个
select * from emp where n= ,p= ,a= 全部命中 内部查询优化器会对该SQL进行优化
where name = 'aa' and age = 10 or phone = '13512341234' or会不走索引让索引失效
在写查询条件时,应该从联合索引的最左边 依次写
查询时,查询条件的列必须跟创建索引时的列顺序一致
索引失效的八种情况
1.使用!=
2.使用or
3.使用 isnull 或者 is not null-null做判断
4条件列做运算 where age+1=20
5.左% 如 name like '%王'
6字符串丢失引号 如 a='1'不能写成a=1
7.分页查询数据量太大 limit 99900,100 先查十万再去掉99900
可以加上限制条件 譬如查第一千页数据 每页显示100 那么可以加上id>98999的条件
8.如果要用in -里面的元素不要超过1000
varchar类型 字符编码不一致