如何为DESC NULLS LAST排序正确创建索引

问题描述 投票:4回答:1

我创建了一个没有指定排序的索引或者第一个/最后一个例如:

CREATE INDEX index_name ON TABLE table_name (date)

现在我的ORDER BY DESC NULLS LAST查询运行速度非常慢。

我在PostgreSQL文档中读到了这一点

NULLS FIRST指定nulls在非null之前排序。这是指定DESC时的默认值。

NULLS LAST指定空值在非空值后排序。这是未指定DESC时的默认值。

因此,如果我创建这样的索引(对于col date):

CREATE INDEX index_name ON TABLE table_name (date DESC NULLS LAST)

我会为像这样的查询获得严重的性能提升

SELECT * FROM table_name ORDER BY date DESC NULLS LAST LIMIT 50 OFFSET 0

?

postgresql indexing
1个回答
2
投票

来自postgres 9.6 documentation

如果您需要在依赖于索引以避免排序步骤的查询中支持“nulls sort low”行为而不是默认的“nulls sort high”,那么NULLS选项很有用。

如果您未在索引上提供NULLS LAST,则查询计划程序很可能需要在返回记录之前对记录进行排序,如果表包含足够的记录,则可能导致性能下降。

© www.soinside.com 2019 - 2024. All rights reserved.