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