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