今天让我们了解下 MySQL 性能分析大杀器 —— 查询截取分析。
查询截取分析
-
通俗来讲
-
观察,至少跑 1 天 ,看看生产的慢 sql 情况。 -
开启慢查询日志,设置阈值,比如超过 5 秒钟的就是慢 sql,并将它抓取出来。 -
explain + 慢 sql 分析 -
show profile -
运维经理或者 DBA,进行 sql 数据库服务器的参数调优。
-
学术说法
-
慢查询的开启并捕获 -
explain + 慢 sql 分析 -
show profile 查询 sql 在 mysql 服务器里面的执行细节和生命周期情况 -
sql 数据库服务器的参数调优
提高 order by 的速度
-
order by 时,select * 是一个大忌,只查询需要的字段,这点非常重要。在这里的影响是:
-
当查询的字段大小总和小于 max_length_for_sort_data 而且排序字段不是 text|blob 类型时,会用改进后的算法——单路排序,否则用老算法——多路排序。 -
两种算法的数据都有可能超出 sort_buffer 的容量,超出之后,会创建 tmp 文件进行合并排序,导致多次 I/O,但是用单路排序算法的风险会更大一些,所以要提高 sort_buffer_size
-
尝试提高 sort_buffer_size 不管用哪种算法,提高这个参数都会提高效率,当然,要根据系统的能力去提高,因为这个参数是针对每个进程的 -
尝试提高 max_length_for_sort_data 提高这个参数,会增加用改进算法的概率,但是如果设的太高,数据总容量超出 sort_buffer_size 的概率就增大,明显症状是高的磁盘 I/O 活动和低的处理器使用率。
为排序使用索引
-
MySQL 两种排序方式:文件排序或扫描有序索引排序 -
MySQL 能为排序与查询使用相同的索引
KEY a_b_c (a,b,c)
-
order by 能使用索引最左前缀
ORDER BY a
ORDER BY a,b
ORDER BY a,b,c
ORDER BY a DESC, b DESC, c DESC -
如果 where 使用索引的最左前缀定义为常量,则 order by 能使用索引
WHERE a = const ORDER BY b,c
WHERE a = const AND b = const ORDER BY c
WHERE a = const ORDER BY b,c
WHERE a = const AND b > const ORDER BY b,c
最后说个事
公号算法变了,为防止看不到我的更新
大家帮忙加个星标
点击上方的公众号卡片
再点右上角三个点
就能看到设为星标
算我跪下来求你们
作者简介:
95后某跨境电商企业程序猿,白天搬砖码代码,晚上自媒体写文章,持续更新编程、科技、互联网相关文章,偶尔也会无痛呻吟,感慨人生百态。自己淋过雨,所以也想为别人撑撑伞。
往期精选:
原文始发于微信公众号(浅墨觅尘往):MySQL 性能分析大杀器(第二章)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/222107.html