MYSQL索引优化建议

1、索引失效

1.1 基本原则

  1. 全值匹配我最爱
  2. 最佳左前缀法则,对于多列索引,查询从最左前列开始,不跳过索引中的列
  3. 不在索引列上做任何操作,计算、函数、自动/手动类型转换),否则会导致索引失效导致全表扫描
  4. 存储引擎不能使用索引中范围条件右边的列
  5. 尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少select *
  6. mysql在使用不等于(!=或者<>)的时候无法使用索引
  7. is null,is not null也无法使用索引
  8. like 以通配符开头(‘%abc…’)mysql索引失效会变成全表扫描的操作,如果非要使用’%…%'类型,可以采用索引覆盖,这样不会扫描全表,可以使用到索引
  9. 字符串不加单引号索引失效
  10. 少用or,用它来连接时会索引失效

2、慢查询日志

通过set slow_query_log=1 和slow_query_log_file=…file,开启慢查询后,可以通过设置long_query_time来指定慢查询阈值,找到那些查询比较慢的SQL进行分析

3、profiling

一般来说,通过观察、构建索引以及explain分析之后的能满足大多数的优化条件,但是,有些时候也需要服务器做一些调整,比如对于那些无法构建索引的,可以适当调整join buffer的大小。
当然通过set profiling=1开启之后,可看到所有的SQL语句都会被记录到profiles中,然后对于每一条SQL,通过select * from query id 可以看到该查询的详细资源使用情况然后做出相应的分析

4、普通日志

通过开启general_log=1,也是可以看到每一条SQL的执行,然后记录到mysql.general_log表中,生产环境一般不建议这样用

你可能感兴趣的:(losemyfuture的博客)