可能的重复:
PostgreSQL 计数查询优化 https://stackoverflow.com/questions/13075210/optimization-of-count-query-for-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)
我的问题是(一个答案可能同时解决多个问题):
Is the count(id)
(or count(*)
就此而言)对于该查询,线性(O(n))
query?
有什么办法可以让 PostgreSQL 中的查询更加高效吗?请记住,我们需要查询不同的参数值,因此我认为为其保留物化视图是不可行的(尽管,如果认为更好的话,我们可能会考虑为每个参数值创建一个物化视图)。
我应该对 PostgreSQL 服务器的查询、数据库结构或配置进行任何更改,以帮助我提高查询性能吗?
任何指示或建议将不胜感激。如果这是完全错误的方法,请告诉我。
Edit
考虑到答案,我想知道使用物化视图是否合理。我的意思是拥有多个物化视图(每个物化视图都有不同的参数值,具有不存在该值的行)。我们的参数值在某种程度上是可预测的,因此这作为解决方案似乎并不是太遥远。这带来了另一个问题:物化视图在这里有帮助吗?我可以在数据库中创建的物化视图(或表)的数量是否存在一些限制(无论是定义还是性能)?
我想到的第一个想法是缓存该值。
您应该评估该值的变化率,并根据该变化率决定是否要在更新该表时执行触发器以计算新值并将其缓存在某处。
该值的结果查询将是一个简单的 SELECT,没有任何 WHERE 子句,因此速度非常快。
或者您可以简单地进行更改,并在更改前后获取一些统计数据,以了解您的速度是否有所提高。
See there https://wiki.postgresql.org/wiki/Slow_Counting以获得进一步的解释。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)