我的应用程序正在执行以下 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 树索引,无论排序顺序如何,它通常应该为您提供相同的性能,但情况似乎并非如此。