gpt4 book ai didi

php - 为多个分组字段优化 PostgreSql 中的选择行数

转载 作者:行者123 更新时间:2023-11-29 00:25:49 25 4
gpt4 key购买 nike

我有这个查询来获取给定过滤器的行数,由于数据库太大,获取结果需要很长时间,有什么方法可以优化它我正在使用 postgresql 8.2

 SELECT COUNT(1) as numrows from ( select lower(column1) as column1, column2, column3, column4, sum(column5) as column5, sum(column6) as column6 
from table_name tablename
where column_date >= 'SOME DATE' and column_date < 'SOME DATE'
group by lower(column1) as column1, column2, column3, column4 ORDER BY column5 desc) allRows

这是我用 EXPLAIN 查询得到的结果

XN Aggregate  (cost=849751.05..849751.05 rows=1 width=0)
-> XN Subquery Scan allrows (cost=805802.05..842426.22 rows=2929933 width=0)
-> XN HashAggregate (cost=805802.05..813126.89 rows=2929933 width=26)
-> XN Seq Scan on table_name tablename (cost=0.00..512808.79 rows=29299326 width=26)
Filter: ((column_date < 'SOME DATE'::date) AND (column_date >= 'SOME DATE'::date))

最佳答案

优化性能的最佳方法是升级到当前版本的 PostgreSQL,如 @Richard already commented . 8.2 早已死去并被遗忘,几乎跟不上。这也是一种安全风险。

此外,摆脱 sum() 计算和 ORDER BY,因为两者都不会影响结果。实际上,整个 SELECT 列表是没有用的。

SELECT COUNT(*) AS numrows
FROM (
SELECT 1
FROM table_name
WHERE column_date >= 'SOME DATE'
AND column_date < 'SOME DATE'
GROUP BY lower(column1), column2, column3, column4
) sub

除此之外,您的 EXPLAIN 输出表明您缺少一个索引,例如:

CREATE INDEX table_name_column_date_idx ON table_name(column_date);

关于php - 为多个分组字段优化 PostgreSql 中的选择行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18981912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com