簡體   English   中英

如何在Postgres中優化此SQL查詢?

[英]How can I optimize this SQL query in Postgres?

我有一個相當大的表,有近100萬行,有些查詢需要長時間(超過一分鍾)。

這是給我一個特別艱難時期的一個......

EXPLAIN ANALYZE SELECT "apps".* FROM "apps" WHERE "apps"."kind" = 'software' ORDER BY itunes_release_date DESC, rating_count DESC LIMIT 12;
                                                           QUERY PLAN                                                            
---------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=153823.03..153823.03 rows=12 width=2091) (actual time=162681.166..162681.194 rows=12 loops=1)
   ->  Sort  (cost=153823.03..154234.66 rows=823260 width=2091) (actual time=162681.159..162681.169 rows=12 loops=1)
         Sort Key: itunes_release_date, rating_count
         Sort Method: top-N heapsort  Memory: 48kB
         ->  Seq Scan on apps  (cost=0.00..150048.41 rows=823260 width=2091) (actual time=0.718..161561.149 rows=808554 loops=1)
               Filter: (kind = 'software'::text)
 Total runtime: 162682.143 ms
(7 rows)

那么,我該如何優化呢? PG版本是9.2.4,FWIW。

已經有kindkind, itunes_release_date索引kind, itunes_release_date

看起來你錯過了一個索引,例如on (kind, itunes_release_date desc, rating_count desc)

apps表有多大? 你有至少這么多內存分配給postgres? 如果每次都必須從磁盤讀取,查詢速度會慢得多。

另一件可能有用的事情是將表格集中在“apps”列上。 這可以加速磁盤訪問,因為所有software行將按順序存儲在磁盤上。

加速此查詢的唯一方法是在(itunes_release_date, rating_count)上創建復合索引。 它將允許Postgres直接從索引中選擇前N行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM