MYSQL - 计算每个表中行数

40

我想知道我的数据库中每个表有多少行。到目前为止,我已经做到了

select count(*) _tablename_; 

不过我需要对每一个表格都这么做,而且表格数量很多。有没有什么最好的方法可以获得包含表格名称和其行数的打印输出?

3个回答

115
SELECT table_name, table_rows
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = '<your db>';

我也希望你意识到查询中存在错误:它缺少了一个FROM


非常感谢。我已经明白了最好从元数据中获取列表的部分! - Redconnection
3
抱歉......我尝试了这个查询,但结果不稳定(每次都会出现不同的值)! - Don
4
是的,InnoDB 行计数不准确是该引擎的一个副产品,正如在此处提到的:http://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html。 - Andrew
1
InnoDB不会在表中保留行的内部计数,因为并发事务可能同时“看到”不同数量的行。如果近似行计数足够,可以使用SHOW TABLE STATUS。 - Jeremy Logan
你还可以通过使用“format(table_rows)”并在其中添加一些逗号来使行计数更易读,从而对其进行改进。 - pjammer
为了获得正确的结果,请运行ANALYZE TABLE table_name。参见:https://dba.stackexchange.com/a/297831/236769 - Adam Marsh

3
这个查询将返回每个表中的行数,但似乎并不总是返回精确值。
SELECT table_name, table_rows
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '<your db>';
TABLE_ROWS:分区中的表行数。对于分区的InnoDB表,TABLE_ROWS列中给出的行计数仅是SQL优化中使用的估计值,可能不总是精确的... 更多信息请参考https://dev.mysql.com/doc/mysql-infoschema-excerpt/5.5/en/partitions-table.html

2
它与上面的答案有何不同? - Abdur Rehman

1
除了使用他人编写的SQL查询之外,还可以使用Workbench GUI获取每个表的行数。要做到这一点,请启动Workbench -> 连接到数据库 -> 右键单击数据库并选择“模式检查器”(如下面的屏幕截图所示 - 我已经突出显示了“行”列):

enter image description here

HTH.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接