postgresql上的日期时间排序非常慢

时间:2015-11-05 18:16:34

标签: sql performance postgresql

我有一个评论表,其中包含app_id(string), reviews_updated_at(timestamp), description(text)和其他内容。该表有大约9000万个条目,我有大约2000读取我的数据库实例的IOPS限制,下面提到的查询需要30-40秒才能完成,有什么办法可以让这个查询执行得更快吗?

我有两个索引app_id(btree)reviews_updated_at(btree)

查询:

select * from reviews
where app_id = '2332223'
order by review_updated_at
offset 200 limit 100

查询计划:

Limit  (cost=243270.84..364905.97 rows=100 width=258) (actual time=23212.698..32806.020 rows=100 loops=1)
  ->  Index Scan using index_reviews_on_review_updated_at on reviews  (cost=0.57..327489222.63 rows=269239 width=258) (actual time=237.720..32805.359 rows=300 loops=1)
        Filter: ((app_id)::text = '2332223'::text)
        Rows Removed by Filter: 36376
Planning time: 0.160 ms
Execution time: 32806.216 ms

1 个答案:

答案 0 :(得分:2)

对于此查询:

reviews(app_id, review_updated_at)

app_id中的最佳索引。实际上,使用此索引,查询应该非常快。

请注意,在比较值时,应确保它们属于同一类型。如果<Header> <MasterFiles> <SourceDocuments> 是一个字符串,则应该有引号。