计数查询的效率,实体视图



可能的重复:
优化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 Server的配置做出任何更改,这可能有助于我改善查询性能?

任何指示或建议都将不胜感激。如果这是一种完全错误的方法,请让我知道。

编辑

考虑到回答的内容,我想知道使用实体视图是否合理。我的意思是有几个实现的视图(每个视图都具有不同的参数值,在不存在该值的地方的行中)。我们的参数值在一定程度上是可预测的,因此作为解决方案,这似乎并不太远。这引起了另一个问题:实体观点会在这里有所帮助吗?对于我可以在数据库中创建的物质视图(或表格)的数量,是否存在某种限制(在定义或性能中)?

想到的第一个想法是缓存值。

您应该评估此值的变更速率,并取决于决定是否要在更新此表更新以计算新值并在某个地方缓存其时是否要执行触发器。

该值的结果查询将是一个简单的选择,而无需任何地方子句,使其非常快。

或者您可以简单地进行更改,并在之前和之后获取一些统计数据,以了解您是否已迅速提高。

请参阅此处的进一步说明。

最新更新