目录:
1、索引失效
1)全值匹配我最爱:查询条件于符合索引顺序
2)最佳左前缀法则:如果索引了多列,要遵守最左前缀法则,即查询where子句从索引的最左前列开始并且不跳过索引中的列(带头大哥要有,中间兄弟不能断)
3)不在索引列上做任何操作(计算、函数、自动或手动类型转换),因为这样会导致索引失效而转向全表扫描
4)存储引擎不能使用索引中范围条件右边的列
比如:创建符合索引 idx_staffs_name_age_pos(name, age, pos), 如果查询条件是 where name=‘xxx‘ and age > 10 and pos=‘xxx‘, 则因为 age > 10 是范围查询,导致idx_staffs_name_age_pos后面的索引列用不上索引(age这个索引列还是能用上的)。
5)尽量使用覆盖索引(只访问索引查询,索引列和查询列一致),少用 select *
6)mysql在使用不等于(!=, <>)时无法使用索引导致全表扫描
7)is null, is not null 也无法使用索引
8)like 以 ‘%xxx‘ 通配符开头,导致索引失效,(如果like ‘xxx%‘,查询ref=range)
问题:解决like ‘%xxx%‘时索引不被使用? 解决:使用覆盖索引
9)字符串不加单引号索引失效
10)少用or,用它来连接时会索引失效
2、SQL性能优化四步
1)慢查询的开启并捕获
2)explain+慢SQL分析
3)show profile 查询 SQL 在 mysql 服务器里面的执行细节和生命周期情况
4)SQL 数据库服务器的参数调优
3、查询优化--小表驱动大表
4、查询优化--order by关键字优化
5、查询优化--group by关键字优化
---