原本可以执行得很快的 SQL 语句,执行速度却比预期的慢很多,原因是什么?如何解决?


原因:从大到小可分为四种情况

    MySQL 数据库本身被堵住了,比如:系统或网络资源不够。
    SQL 语句被堵住了,比如:表锁,行锁等,导致存储引擎不执行对应的 SQL 语句。
    确实是索引使用不当,没有走索引。
    表中数据的特点导致的,走了索引,但回表次数庞大。

解决:

    考虑采用 force index 强行选择一个索引
    考虑修改语句,引导 MySQL 使用我们期望的索引。比如把“order by b limit 1” 改成 “order by b,a limit 1” ,语义的逻辑是相同的。
    第三种方法是,在有些场景下,可以新建一个更合适的索引,来提供给优化器做选择,或删掉误用的索引。
    如果确定是索引根本没必要,可以考虑删除索引。

0 0
讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
帮助