我们需要计算 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 https://stackoverflow.com/questions/9067335/how-to-create-table-inside-specific-schema-by-default-in-postgres/9067777#9067777选择最佳匹配。如果该表在任何模式中都不存在(或看不到)search_path
您收到一条错误消息。看对象标识符类型在手册中 https://www.postgresql.org/docs/current/datatype-oid.html.
演员阵容bigint
格式化real
数字很好,特别是对于大数字。
Also, reltuples
可能或多或少已经过时了。有一些方法可以在一定程度上弥补这一点。请参阅稍后的答案以及新的和改进的选项:
- 快速发现 PostgreSQL 中表的行数的方法 https://stackoverflow.com/questions/7943233/fast-way-to-discover-the-row-count-of-a-table/7945274#7945274
并询问pg_stat_user_tables https://www.postgresql.org/docs/13/monitoring-stats.html#MONITORING-STATS-VIEWS-TABLE慢很多倍(尽管仍然比完整计数快得多),因为这是几个表的视图。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)