MySQL 性能分析大杀器(第二章)

今天让我们了解下 MySQL 性能分析大杀器 —— 查询截取分析。

查询截取分析

  • 通俗来讲
  1. 观察,至少跑 1 天 ,看看生产的慢 sql 情况。
  2. 开启慢查询日志,设置阈值,比如超过 5 秒钟的就是慢 sql,并将它抓取出来。
  3. explain + 慢 sql 分析
  4. show profile
  5. 运维经理或者 DBA,进行 sql 数据库服务器的参数调优。
  • 学术说法
  1. 慢查询的开启并捕获
  2. explain + 慢 sql 分析
  3. show profile 查询 sql 在 mysql 服务器里面的执行细节和生命周期情况
  4. sql 数据库服务器的参数调优

提高 order by 的速度

  1. order by 时,select * 是一个大忌,只查询需要的字段,这点非常重要。在这里的影响是:
  • 当查询的字段大小总和小于 max_length_for_sort_data 而且排序字段不是 text|blob 类型时,会用改进后的算法——单路排序,否则用老算法——多路排序。
  • 两种算法的数据都有可能超出 sort_buffer 的容量,超出之后,会创建 tmp 文件进行合并排序,导致多次 I/O,但是用单路排序算法的风险会更大一些,所以要提高 sort_buffer_size
  1. 尝试提高 sort_buffer_size 不管用哪种算法,提高这个参数都会提高效率,当然,要根据系统的能力去提高,因为这个参数是针对每个进程的
  2. 尝试提高 max_length_for_sort_data 提高这个参数,会增加用改进算法的概率,但是如果设的太高,数据总容量超出 sort_buffer_size 的概率就增大,明显症状是高的磁盘 I/O 活动和低的处理器使用率。

为排序使用索引

  • MySQL 两种排序方式:文件排序或扫描有序索引排序
  • MySQL 能为排序与查询使用相同的索引

KEY a_b_c (a,b,c)

  1. order by 能使用索引最左前缀
    ORDER BY a
    ORDER BY a,b
    ORDER BY a,b,c
    ORDER BY a DESC, b DESC, c DESC
  2. 如果 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后某跨境电商企业程序猿,白天搬砖码代码,晚上自媒体写文章,持续更新编程、科技、互联网相关文章,偶尔也会无痛呻吟,感慨人生百态。自己淋过雨,所以也想为别人撑撑伞。

往期精选:

微信上的这3个隐藏“标志”,代表有人喜欢你,一眼便知

微信,看看你的另一半跟谁聊天频繁!

微信上已删除的聊天记录,用这几种方式就可以恢复啦!

让你的微信“拍一拍”有趣且不失风度

微信年度账单来了,不敢看!

还在使用默认的微信图标?赶紧换个吧!

我的微信和你们的不一样!?

原文始发于微信公众号(浅墨觅尘往):MySQL 性能分析大杀器(第二章)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/222107.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!