我有一个每天运行几次的脚本,它记录了几个PostgreSQL表的行数。
有些表虽然是只读的,但从未改变过。 (不添加或删除任何行,也不更改任何值。)
有没有办法可以快速从PostgreSQL获取行数?例如。我可以在select count(*) from some_table;
上创建索引吗?
我不想在脚本中缓存它。如果我要在脚本中缓存,我还没有找到一种可靠的方法来确定自上次脚本运行以来表是否已更改。
答案 0 :(得分:2)
不幸的是,在postgresql中,SELECT COUNT(*)常常与slower than mysql进行比较。
您可以使用以下查询替代SELECT COUNT(*)。
SELECT reltuples FROM pg_class WHERE relname = 'mytable';
这并不总是100%最新,但对于不可变表,它每次都是准确的。瞬间。对于非常大的表,百分比误差将非常小,因此值得大量节省时间。
如果它确实重要并且表不包含空值,则可以使用
SELECT COUNT(primary_key_column) FROM table
这将明显快于SELECT COUNT(*)