如何最有效地获取数据库中所有表的行数?
我正在使用Postgres数据库。
示例结果
table_name row_count
------------ -------------
some_table 1,234
foobar 5,678
another_table 32
...
如何最有效地获取数据库中所有表的行数?
我正在使用Postgres数据库。
示例结果
table_name row_count
------------ -------------
some_table 1,234
foobar 5,678
another_table 32
...
如果你想要特定表格的行数,那么这个代码可以正常工作。
SELECT reltuples FROM pg_class WHERE oid = 'my_schema.my_table'::regclass;
reltuples 是 pg_class 表中的一列,它保存有关表中行数的数据。这仅是计划器使用的估计值。
如果您想要所有表格及其行数的列表,则可以使用它完成工作。
SELECT
pgClass.relname AS tableName,
pgClass.reltuples AS rowCount
FROM
pg_class pgClass
INNER JOIN
pg_namespace pgNamespace ON (pgNamespace.oid = pgClass.relnamespace)
WHERE
pgNamespace.nspname NOT IN ('pg_catalog', 'information_schema') AND
pgClass.relkind='r'
"为什么"SELECT count(*) FROM bigtable;"很慢?" : count(*)
ANALYZE
命令以获得正确的结果。对我来说,SELECT count(*) FROM table;
查询结果与表格实际情况存在差异,只有经过 ANALYZE
后才能够得出正确结果。 - wanaryytel如果要获取整个数据库的总行数,请使用以下命令:
SELECT
SUM(pgClass.reltuples) AS totalRowCount
FROM
pg_class pgClass
LEFT JOIN
pg_namespace pgNamespace ON (pgNamespace.oid = pgClass.relnamespace)
WHERE
pgNamespace.nspname NOT IN ('pg_catalog', 'information_schema') AND
pgClass.relkind='r'
SELECT
pgClass.relname AS tableName,
pgClass.reltuples AS rowCount
FROM
pg_class pgClass
LEFT JOIN
pg_namespace pgNamespace ON (pgNamespace.oid = pgClass.relnamespace)
WHERE
pgNamespace.nspname NOT IN ('pg_catalog', 'information_schema') AND
pgClass.relkind='r'
For reference here is the link