可能重复:
PostgreSQL 的计数查询优化
使用 PostgreSQL 9.2,我们试图弄清楚是否有一种方法可以跟踪查询的结果数量,并以有效的方式返回该数字。这个查询应该每秒执行几次(可能几十到几百甚至几千次)。我们现在的查询看起来像这样,但我们想知道这是否效率低下:
-- Get # of rows that do not have ‘parameter value’ in array_column
select count(*)
from table
where not (ARRAY[‘parameter value’] <@ table.array_column)
我的问题是(一个答案可能同时解决多个问题):
该查询的count(id)
(或count(*)
就此而言)是线性(O(n))
查询吗?
有什么方法可以让这个查询在 PostgreSQL 中更有效吗?请记住,我们需要查询不同的参数值,因此我认为为其保留物化视图是不可行的(尽管如果认为这样更好,我们可能会考虑为每个参数值创建一个)。
我应该对查询、数据库结构或我的 PostgreSQL 服务器的配置进行任何更改以帮助我提高查询性能吗?
任何指针或建议将不胜感激。如果这是完全错误的方法,请告诉我。
编辑
考虑到答案,我想知道使用物化视图是否合理。我的意思是有几个物化视图(每个视图都有一个不同的参数值,具有不存在该值的行)。我们的参数值在一定程度上是可预测的,因此作为解决方案似乎并不太远。这带来了另一个问题:物化视图在这里会有所帮助吗?我可以在数据库中创建的物化视图(或表)的数量是否存在一些限制(定义或性能)?