mysql高级(查询截取分析)

目录:

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关键字优化

---

   

相关推荐