首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化PostgreSql查询,以获取根据多组by's找到并需要有限行数的记录总数

问优化PostgreSql查询,以获取根据多组by's找到并需要有限行数的记录总数
EN

Stack Overflow用户
提问于 2013-09-30 13:48:57
回答 1查看 1.1K关注 0票数 0

在这个查询中,我试图根据给定的过滤器获取记录的总数,并试图在一个查询中获取分页所需的有限数量的数据。在前面的两个步骤中,我首先根据Optimising Select number of rows in PostgreSql for multiple group by fields计算记录数,然后根据页面大小和所需的偏移量在不同的查询中获得所需的行数。

代码语言:javascript
复制
EXPLAIN select count (1) OVER () AS numrows , lower(column1) as column1, column2, column3, column4, column5, column6, column7, column8, sum(column9) as column9, sum(column10) as column10 
from tableName tablename 
where 
    column8 in (SOME 50-100 sets) 
    and column_date >= '2013-09-01' 
    and column_date < '2013-09-30' 
    group by lower(column1), column2, column3, column4, column5, column6, column7, column8 
    ORDER BY column9 desc 
    LIMIT 1000 OFFSET 0

XN Limit  (cost=1000134721702.61..1000134721702.63 rows=1000 width=67)
  ->  XN Merge  (cost=1000134721702.61..1000135118514.84 rows=158724893 width=67)
        Merge Key: sum(column9)
        ->  XN Network  (cost=1000134721702.61..1000135118514.84 rows=158724893 width=67)
              Send to leader
              ->  XN Sort  (cost=1000134721702.61..1000135118514.84 rows=158724893 width=67)
                    Sort Key: sum(column9)
                    ->  XN Window  (cost=107149638.61..113101822.10 rows=158724893 width=67)
                          ->  XN Network  (cost=107149638.61..108340075.31 rows=158724893 width=67)
                                Send to slice 0
                                ->  XN HashAggregate  (cost=107149638.61..108340075.31 rows=158724893 width=67)
                                      ->  XN Seq Scan on tableName tablename  (cost=0.00..67468415.44 rows=1587248927 width=67)
                                            Filter: ((column_date < '2013-09-30'::date) AND (column_date >= '2013-09-01'::date) AND (column8 = ANY ('{SOME 50-100 sets}'::integer[])))

版本细节

代码语言:javascript
复制
PostgreSQL 8.0.2 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3), Redshift 1.0.666 

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-14 15:06:26

对于分页记录返回,没有优化红移。它的目的是最大限度地提高分析查询的性能,这些查询涉及许多记录,但只返回一个很小的输出。

如果您打算对结果进行分页,我强烈建议首先将SELECT的输出发送到临时表。然后,您可以做一个简单的(和快速!)在该表上计数(*)并对其分页,而不强制重新执行查询。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19095925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档