面试官:你说一说MySQL查询慢应该怎么办?

SQL语句执行慢有两种情况:

  • 偶尔慢:MySQL在刷新脏

    1. redolog写满了,要往前推进checkpoint
    2. 内存不够用了,要从LRU链表中淘汰,触发了脏页刷新
    3. MySQL认为系统空闲的时候,即使MySQL很忙,也要见缝插针地找时间,只要有机会就刷一点“脏页”
    4. MySQL关闭的时候

    上述所说也是MySQL中刷新脏页的时机。

  • 一直慢:MySQL索引没有设置好,查询时候优化器选错索引,SQL语句没有写好等。

这种情况下怎么优化呢?

我按点来说:

  • 偶尔慢:

    上述所说的偶尔慢情况都是与MySQL系统刷新脏页有关。

    而刷新脏页与IOPS有关, IOPS,具体可以看我这篇文章点击查看。

  • 一直慢

    • 先查看SQL语句,检查是不是SQL语句没写好
    • 查看MySQL的explain执行计划点击查看explain详情,,看看是不是用错索引了,可以让它强制使用想用的索引
    • 查看慢查询日志,首先将long_query_time = 0参数设置为0,让它每条都写入慢查询日志。
    • 如果出判断索引没设置好可以重设索引,可以使用一些覆盖索引的思想和索引下推的特性,这些概念不清楚的可以看我这篇文章点击查看

你可能感兴趣的:(MySQL,mysql,数据库,java,性能优化)