一、SQL查询优化(重要)
1.1 获取有性能问题SQL的三种方式
1.通过用户反馈获取存在性能问题的SQL;
2.通过慢查日志获取存在性能问题的SQL;
3.实时获取存在性能问题的SQL;
1.1.2 慢查日志分析工具
相关配置参数:
slow_query_log # 启动停止记录慢查日志,慢查询日志默认是没有开启的可以在配置文件中开启(on)
slow_query_log_file # 指定慢查日志的存储路径及文件,日志存储和数据从存储应该分开存储
long_query_time # 指定记录慢查询日志SQL执行时间的阀值默认值为10秒通常,对于一个繁忙的系统来说,改为0.001秒(1毫秒)比较合适
log_queries_not_using_indexes #是否记录未使用索引的SQL
常用工具:mysqldumpslow和pt-query-digest
pt-query-digest --explain h=127.0.0.1,u=root,p=p@ssWord slow-mysql.log
1.1.3 实时获取有性能问题的SQL(推荐)
SELECT id,user,host,DB,command,time,state,info
FROM information_schema.processlist
WHERE TIME>=60
查询当前服务器执行超过60s的SQL,可以通过脚本周期性的来执行这条SQL,就能查出有问题的SQL。
1.2 SQL的解析预处理及生成执行计划(重要)
1.2.1 查询过程描述(重点!!!)
通过上图可以清晰的了解到MySql查询执行的大致过程:
1.发送SQL语句。
2.查询缓存,如果命中缓存直接返回结果。
3.SQL解析,预处理,再由优化器生成对应的查询执行计划。
4.执行查询,调用存储引擎API获取数据。
5.返回结果。
1.2.2 查询缓存对性能的影响(建议关闭缓存)
第一阶段:
相关配置参数:
query_cache_type # 设置