直接查 information_schema.tables 表是最常用高效方式,但 table_rows 为估算值,InnoDB 误差达±40%~50%,MyISAM 较准;精确统计需用 COUNT(*),但大表慎用。

直接查 information_schema.tables 表是最常用、最高效的方式,但要注意 table_rows 是估算值,尤其对 InnoDB 表可能有较大偏差。
查单个表的记录数(快速估算)
适用于日常巡检或粗略评估:
- 执行:
SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema = 'your_db' AND table_name = 'your_table'; -
table_rows字段返回的是优化器统计值,非实时精确值 - InnoDB 表误差常见为 ±40%~50%,MyISAM 表相对准确
查指定数据库所有表的记录数(按大小排序)
便于识别大表、定位数据分布:
- 执行:
SELECT table_name, table_rows, TRUNCATE(data_length/1024/1024,2) AS data_mb, TRUNCATE(index_length/1024/1024,2) AS idx_mb FROM information_schema.tables WHERE table_schema = 'your_db' AND table_type = 'BASE TABLE' ORDER BY table_rows DESC; - 加上
AND table_type = 'BASE TABLE'可排除视图干扰 -
data_mb和idx_mb分别反映数据和索引占用的磁盘空间(单位 MB)
获取数据库总记录数(汇总统计)
适合做容量规划或迁移前评估:
- 执行:
SELECT SUM(table_rows) AS total_rows FROM information_schema.tables WHERE table_schema = 'your_db' AND table_type = 'BASE TABLE'; - 结果是各表
table_rows的加总,仍属估算,不等于SELECT COUNT(*) FROM ……累加 - 如需精确总数,必须逐表执行
COUNT(*),但大表会锁表、耗时长,慎用
需要精确记录数时的操作建议
仅在审计、校验等强一致性场景下才推荐:
- 对单表:直接运行
SELECT COUNT(*) FROM your_table; - 对多表:可写简单脚本循环执行
COUNT(*),并把结果存入临时表或导出 - 避免在业务高峰期执行全表 COUNT,尤其是千万级以上大表
- 若表带软删除字段(如
isdel),记得加条件过滤,例如COUNT(*) WHERE isdel = '0'