我的请求有问题。我有一个表,其中
id
是 UUID,并且我有一个类似 的查询
SELECT * FROM table
WHERE fk = ?
ORDER BY id ASC
LIMIT 5;
这个查询运行了大约 50 秒,但是如果我删除
ORDER BY id
,这个查询运行时间为 0.3 秒。但如果我使用一些同时也是 UUID 的 fk
,ORDER BY fk
工作速度很快。
有了这些信息,我只能猜测优化器选择使用支持
ORDER BY
的索引,徒劳地希望快速找到足够的结果行。
您可以禁用该策略
ORDER BY id ASC NULLS FIRST
除非您使用
NULLS FIRST
创建索引,否则默认情况下会使用 NULLS LAST
创建索引。但即使没有 NULL 值,PostgreSQL 也不会考虑使用 NULLS LAST
为带有 ORDER BY
的 NULLS FIRST
子句创建的索引。
第一个查询(但不是第二个)中存在的
ORDER BY
子句向查询管道添加了额外的排序步骤。 对于中等大小的表,这种排序可能需要一些时间,特别是如果您的查询没有任何索引方案来使其运行得更快。 您当前的观察结果是预期的。