1.如何获取有性能问题的SQL
通过用户反馈获取存在性能问题的SQL
通过慢查日志获取存在性能问题的SQL
实时获取存在性能问题的SQL
2慢查询日志介绍
slow_query_log 启动停止记录慢查日志
slow_query_log_file 指定慢查日志的存储路径及文件
long_query_time 指定记录慢查日志SQL执行时间的伐值
log_queries_not_using_indexes 是否记录未使用索引的SQL
常用的慢查日志分析工具(mysqldumpslow)
汇总除查询条件外其它完全相同的SQL,并将分析结果按照参数中所指定的顺序输出。
如何实时获取有性能问题的SQL:
SELECTid,'user','host',DB,command,'time',state,infoFROMinformation_schema.PROCESSLISTWHERETIME>=60
通过脚本周期性的执行以上SQL,就可以实时获取性能问题。
3.SQL的解析预处理及生成执行计划
MySQL服务器处理查询请求的整个过程:
客户端发送SQL请求给服务器
服务器检查是否可以在查询缓存中命中该SQL
服务器端进行SQL解析,预处理,再由优化器生成对应的执行计划
根据执行计划,调用存储引擎API来查询数据
将结果返回给客户端
查询缓存对SQL性能的影响:
优先检查这个查询是否命中查询缓存中的数据。是通过一个对大小写敏感的哈希查找实现的。hash查找只能进行全值匹配。从查询缓存中直接返回结果并不容易。对于一个读写频繁的系统使用查询缓存很可能会降低查询处理的效率。建议不要使用查询缓存。
MySQL优化器可优化的SQL类型
重新定义表的关联顺序
将外连接转换成内连接
使用等价变换规则
优化count()、min()和max()
将一个表达式转化为常数表达式
使用等价变换规则
子查询优化
提前终止查询
对in()条件进行优化