慢查询是什么?
MySQL的慢查询全名为慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阈值的语句。
默认情况下MySQL数据库并不会启动慢查询日志,需要手动来设置参数。
在调优时如果不需要,则不启动该参数,开启慢查询日志会带来一定的性能影响。
如何配置慢查询?
--查看慢查询的配置信息
mysql>show variables like '%slow%';
--查看慢查询的时间定义
mysql>show varables like 'long_query_time';
--设置慢查询的时间定义
set long_query_time=2;
--开启慢查询日志
set global slow_query_log='ON';
Explain
一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化后生成一个所谓的执行计划
这个执行计划展示了接下来具体执行查询的方式,例如多表连接的顺序。
同时MySQL提供了EXPLAIN语句来帮助查看某个语句的具体执行计划。
mysql> explain select * from users where uname="Christian"\g;
通过给uname增加索引可以大大提高数据检索的效率,同时也会降低增删改效率
同时由于每创建一个索引都会建立一个B+树,会消耗很大的存储空间,同时也需要去维护
适当创建索引
- 创建并使用自增数字来建立主键索引
- 进场作为where条件的字段建立索引
- 添加索引的字段尽可能保持唯一性
- 考虑使用联合索引并进行索引覆盖
合理使用索引
- 不要在列上使用函数和进行运算。这样会导致设置的索引失效,进行全表扫描
- 隐式转换可能导致索引失效(等号左右两边数据类型不匹配,会发生自动转换但是索引会失效)。
- like语句可能导致索引失效。(通配符尽可能不要放在开头)。
- 复合索引的使用(联合、组合),MySQL同时只能使用一个索引
多单列索引不是最佳选择
- 尽可能达到索引覆盖 (组合索引)
SQL语句优化
- 避免嵌套语句(子查询)
- 避免多表查询(复杂查询简单化)
索引优化
- 适当建立索引
- 合理使用索引