面试官:你说一说MySQL查询慢应该怎么办?
QL语句执行慢有两种情况:偶尔慢:MySQL在刷新脏redolog写满了,要往前推进checkpoint内存不够用了,要从LRU链表中淘汰,触发了脏页刷新MySQL认为系统空闲的时候,即使MySQL很忙,也要见缝插针地找时间,只要有机会就刷一点“脏页”MySQL关闭的时候上述所说也是MySQL中刷新脏页的时机。一直慢:MySQL索引没有设置好,查询时候优化器选错索引,SQL语句没有写好等。
·
SQL语句执行慢有两种情况:
-
偶尔慢:MySQL在刷新脏
- redolog写满了,要往前推进checkpoint
- 内存不够用了,要从LRU链表中淘汰,触发了脏页刷新
- MySQL认为系统空闲的时候,即使MySQL很忙,也要见缝插针地找时间,只要有机会就刷一点“脏页”
- MySQL关闭的时候
上述所说也是MySQL中刷新脏页的时机。
-
一直慢:MySQL索引没有设置好,查询时候优化器选错索引,SQL语句没有写好等。
这种情况下怎么优化呢?
我按点来说:
-
偶尔慢:
上述所说的偶尔慢情况都是与MySQL系统刷新脏页有关。
而刷新脏页与IOPS有关, IOPS,具体可以看我这篇文章点击查看。
-
一直慢
- 先查看SQL语句,检查是不是SQL语句没写好
- 查看MySQL的explain执行计划点击查看explain详情,,看看是不是用错索引了,可以让它强制使用想用的索引
- 查看慢查询日志,首先将
long_query_time = 0
参数设置为0,让它每条都写入慢查询日志。 - 如果出判断索引没设置好可以重设索引,可以使用一些覆盖索引的思想和索引下推的特性,这些概念不清楚的可以看我这篇文章点击查看
更多推荐
已为社区贡献1条内容
所有评论(0)