首页/数据/SQL 速查/大表计数:精确与近似
本包目录(311 条)
查询基础33 条连接与子查询40 条
聚合与窗口函数54 条
函数速查60 条变更与事务52 条性能与执行计划72 条

大表计数:精确与近似

InnoDB 的 COUNT(*) 需要扫描;报表里动辄全表计数时,可用统计信息近似值或计数表方案。

SQL 速查数据更新于 2026-10-12

近似值(MySQL)

近似值(MySQL)
SELECT table_name, table_rows
FROM information_schema.tables
WHERE table_schema = 'app'
  AND table_name = 'orders';

近似值(PostgreSQL)

近似值(PostgreSQL)
SELECT reltuples::bigint AS approx_rows
FROM pg_class
WHERE relname = 'orders';
MySQLinformation_schema.tables.table_rows 为估算值,误差可达较大比例
PostgreSQLpg_class.reltuples 由 ANALYZE/VACUUM 更新,同为估算
精确方案维护计数表或用近似统计(如 HyperLogLog)
近似值与真实行数可能有明显偏差,不要用于对账与计费场景。

易错点

  • 把 table_rows 当精确值做对账会翻车,只用于容量预估与报表提示
  • 计数表方案要在同一事务里随业务写维护,否则会出现长期漂移

数据来源与参考

  • MySQL 8.0 Reference Manual · InnoDB Restrictions on COUNT
  • PostgreSQL Documentation · pg_class
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌