SQL_查询优化
如何获取有性能问题的SQL
通过慢查询日志获取存在性能问题的SQL
使用慢查询日志获取有性能问题的SQL
slow_query_log 参数:on 启动停止记录慢查询日志(默认关闭)
slow_query_log_file 指定慢查询日志的存储路径及文件(默认情况下保存在MySQL的数据目录中)==推荐:==将日志存储和数据存储分开存储
long_query_time 指定记录慢查询日志SQL执行时间的伐值(默认值为10秒。默认单位:秒。推荐:改为1毫秒)记录所有符合条件的SQL:包括查询语句、修改语句、回滚SQL。
log_queries_not_using_indexes 是否记录所有未使用索引的SQL
使用慢查询日志获取有性能的SQL
慢查询日志中的内容:
常用的慢查询日志分析工具(mysqldumpslow)
汇总除查询条件外其他完全相同的SQL,并将分析结果按照参数中所指定的顺序输出。
mysqldumpslow -s r -t 10 slow-mysql.log
-s order(c,t,l,at,al,ar)指定按照那种排序方式输出结果。
c:总次数
t:总时间
l:锁的时间
r:总数据行
at,al,ar:t,l,r平均数(例:at = 总时间/总次数)
-t top 指定取前几条作为结果输出
实时获取性能问题的SQL
SELECT id,`usr`,`host`.DB,command,`time`,state,info FROM information_schema.PROCESSLIST WHERE TIME >=60
查询速度为什么会慢
- 客户端发送SQL请求给服务器
- 服务器检查是否可以在查询缓存中命中该SQL
- 服务器端进行SQL解析,预处理,再由优化器生成对应的执行计划
- 根据执行计划,调用存储引擎API来查询数据
- 将结果返回给客户端
以上就是MySQL服务器处理查询请求的整个过程