Skip to main content

Quick Count


使用最小覆盖索引

针对 InnoDB 表(几十万到几百万行)快速统计行数,可以有几个方法。下面按实用性和效率排序:

  • 选择最窄的索引列(最好是整型或短列)进行扫描,不访问表数据页。
  • 假设你有一个 updated_at 的索引:
SELECT COUNT(updated_at) FROM cert;
  • 优化器会用覆盖索引,只扫描索引页,比全表扫描快很多。
  • 如果想强制使用:
SELECT COUNT(updated_at) FROM cert USE INDEX (idx_updated_at);

注意:不要用 COUNT(*) 强制扫描宽索引,如果有多个索引,尽量选最窄的。 如果你用 COUNT(id)(扫描主键索引),实际上在扫描整个聚簇索引,整行数据都要经过处理。