【发布时间】:2013-05-29 17:22:56
【问题描述】:
我有一个包含近 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。
kind 和 kind, itunes_release_date 上已有索引。
【问题讨论】:
-
这不能回答你的问题,但如果你有 100 万条记录,你可能最好创建一个
app_kind表,其中包含来自apps的数字引用,而不是重复varchars,例如 @ 987654327@各地 -
@LukasEder:或者他可以使用枚举来保持现有查询不变。
标签: sql performance postgresql optimization