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

postgresql上的日期时间排序非常慢,sql,performance,postgresql,Sql,Performance,Postgresql,我有一个评论表,它有,app\u id(string)、评论更新时间(timestamp)、描述(text)和其他内容。该表有大约9000万个条目,我的数据库实例上有大约2000个读取IOPS限制,下面提到的查询需要30-40秒才能完成,是否有任何方法可以使此查询执行得更快 我有两个索引app\u id(btree),reviews\u updated\u at(btree) 查询: select * from reviews where app_id = '2332223' order by

我有一个评论表,它有,
app\u id(string)、评论更新时间(timestamp)、描述(text)
和其他内容。该表有大约9000万个条目,我的数据库实例上有大约2000个读取IOPS限制,下面提到的查询需要30-40秒才能完成,是否有任何方法可以使此查询执行得更快

我有两个索引
app\u id(btree)
reviews\u updated\u 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
对于此查询:

select *
from reviews
where app_id = '2332223'
order by review_updated_at
offset 200
limit 100;
评论中的最佳索引(app\u id,review\u updated\u at)
。实际上,有了这个索引,查询应该相当快


请注意,在比较值时,应确保它们的类型相同。如果
app\u id
是一个字符串,那么应该有引号。

为了让它运行得更快,添加一个where子句,这样可以减少要排序的记录。ap\u似乎是一个整数。删除引号->
WHERE ap_id=2332223
(可能您的统计数据已关闭)@DanBracuk WHERE子句?这些是我想要的记录。@wildplasser在某些情况下它是整数,在其他情况下它不是整数。列类型为字符串。2000 IOPS限制-您认为每秒可以读取多少磁盘页?你能在一些真正的硬件上尝试这个查询吗?哪些值应该是相同的类型?app_id和它要比较的值。app_id的数据类型是string,表中的大多数app_id都是字符串,只有一些是数字。谢谢,现在使用复合索引速度非常快。