我创建了一个没有指定排序的索引或者第一个/最后一个例如:
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
?
来自postgres 9.6 documentation
如果您需要在依赖于索引以避免排序步骤的查询中支持“nulls sort low”行为而不是默认的“nulls sort high”,那么NULLS选项很有用。
如果您未在索引上提供NULLS LAST,则查询计划程序很可能需要在返回记录之前对记录进行排序,如果表包含足够的记录,则可能导致性能下降。