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

 

 

 

 

 

 

 

 

---

   

mysql高级(查询截取分析)

上一篇:性能测试案例:Oracle重复的SQL


下一篇:MySQL order by if()或order by in()条件排序