sql - 如何加快 PostgreSQL 表中的行计数?

标签 sql postgresql count postgresql-performance

我们需要计算 PostgreSQL 表中的行数。在我们的例子中,不需要满足任何条件,如果行估计显着提高了查询速度,那将是完全可以接受的。

基本上,我们想要select count(id) from <table>尽可能快地运行,即使这意味着得不到准确的结果。

最佳答案

快速估算:

SELECT reltuples FROM pg_class WHERE relname = 'my_table';

不过,有几个注意事项。其一,relnamepg_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/

相关文章:

mysql - 使用 mysql 查询计算 "trash bin"中的所有项目

Mysql 统计每个月的浏览者总数

sql - Postgres upsert 使用来自 select 的结果

sql - 显示下一个事件日期

mysql - SQL开始事务

postgresql - 两种不同形式的数据库连接字符串

postgresql - paAdmin4 根本没有在浏览器中显示。没有服务器,没有..没有

postgresql - PostgreSQL 中 UUID 的校验和

SQL ORDER BY 日期问题

php - 2 通过不同、求和、计数进行分组 : PHP MySQL