小编kce*_*los的帖子

加速索引扫描向后查询

我的应用程序正在执行以下 psql 查询,并且运行速度非常慢:

SELECT COUNT(*) 
FROM (
  SELECT 1 AS one 
  FROM "large_table" 
  WHERE "large_table"."user_id" = 123 
  ORDER BY "large_table"."id" desc 
  LIMIT 1 OFFSET 30
) subquery_for_count;
Run Code Online (Sandbox Code Playgroud)

当我将 更改ORDER BY为时ASC,它的运行速度快了 100 倍。我在 id 上有默认的主键索引,并且我已经尝试按降序顺序为 id 添加附加索引,但这似乎没有什么区别。

当我运行解释分析时,我发现它在慢速查询 ( ) 上使用向后索引扫描desc。我尝试手动禁用会话的索引扫描,发现查询运行时间为 40 秒,而不是 2 分钟,这是一个显着的改进。

知道如何在按 DESC 排序时尝试提高此查询的速度吗?我读过,对于 b 树索引,无论排序顺序如何,它通常应该为您提供相同的性能,但情况似乎并非如此。

postgresql index index-tuning postgresql-performance

7
推荐指数
2
解决办法
4820
查看次数