”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么我对change_event 表的“SELECT COUNT(*)”查询如此慢?

为什么我对change_event 表的“SELECT COUNT(*)”查询如此慢?

发布于2024-11-18
浏览:456

Why are my \

解决 MySQL 上缓慢的“SELECT COUNT(*)”查询

对change_event 表的查询,对超过特定change_event_id 的行进行计数,正在经历严重的延误。但为什么?让我们深入研究一下可能的原因。

揭秘InnoDB的行为

MySQL的InnoDB引擎使用聚集主键,这意味着主键与数据页中的行数据一起存储,而不是比单独的索引页。因此,范围扫描(例如您的扫描)需要扫描数据页中所有可能较宽的行。表的 xml_diff 列(一种 TEXT 数据类型)加剧了这一因素。

优化策略

为了加速查询,有两种方法值得考虑:

  • 优化表: 该命令将数据页重新组织成排序的顺序,可能会提高范围扫描的效率。
  • 创建附加索引:仅在change_event_id列上建立非主索引会在索引页中创建该列的副本。该索引的扫描速度比数据页快得多。创建后验证解释计划以确认其利用率。

其他提示:

要进一步提高性能,请考虑将 change_event_id 列更改为 bigint unsigned。此步骤可以防止负值,还可以简化处理。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3