使用Where子句在MySQL中进行慢速COUNT(*)查询
处理涉及COUNT(*)的缓慢MySQL查询时,了解底层因素至关重要。在这种特殊情况下,从查询本身或 EXPLAIN 语句中不会立即看出较长的执行时间。
了解问题
相关表,change_event, Change_event_id 列上有一个聚集主键。在 InnoDB 中,聚集主键与数据一起存储在数据页中,这与驻留在单独索引页中的非聚集索引不同。
聚集主键上的范围扫描问题
所提供的查询对聚集主键执行范围扫描,其中需要扫描表的很大一部分。这可能非常耗时,因为数据页可能没有按排序顺序物理存储,从而导致额外的 I/O 操作。
潜在解决方案
优化此查询时,请考虑实施以下一种或两种策略:
附加说明:
如果 Change_event_id 列确实是自动递增列,请考虑将其修改为 BIGINT UNSIGNED从零开始。这将防止有符号整数溢出的潜在问题。
以上是为什么 MySQL 中带有 WHERE 子句的 COUNT(*) 查询速度很慢?的详细内容。更多信息请关注PHP中文网其他相关文章!