我们需要计算 PostgreSQL 表中的行数。在我们的例子中,不需要满足任何条件,如果行估计显着提高了查询速度,那将是完全可以接受的。
基本上,我们想要select count(id) from <table>
尽可能快地运行,即使这意味着得不到准确的结果。
最佳答案
快速估算:
SELECT reltuples FROM pg_class WHERE relname = 'my_table';
不过,有几个注意事项。其一,relname
在pg_class
中不一定是唯一的。在数据库的多个模式中可以有多个具有相同 relname
的表。明确一点:
SELECT reltuples::bigint FROM pg_class WHERE oid = 'my_schema.my_table'::regclass;
如果您不对表名进行模式限定,则转换为 regclass
会观察到当前的 search_path
选择最佳匹配。如果该表在 search_path
中的任何模式中都不存在(或看不到),您会收到一条错误消息。参见 Object Identifier Types in the manual .
转换为 bigint
可以很好地格式化 real
数字,尤其是对于大数。
另外,reltuples
可能或多或少已经过时了。有一些方法可以在一定程度上弥补这一点。稍后使用新的和改进的选项查看此答案:
以及对 pg_stat_user_tables
的查询慢很多倍(尽管仍然比完整计数快得多),因为这是几个表的 View 。
关于sql - 如何加快 PostgreSQL 表中的行计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14570488/