我创建了一个索引而没有指定排序或者是第一个/最后一个 e.g:
CREATE INDEX index_name ON TABLE table_name (date)
现在我的ORDER BY DESC NULLS LAST
查询运行速度非常慢。
我在PostgreSQL文档中读到了
NULLS FIRST指定nulls在非null之前排序。这是 指定DESC时的默认值。
NULLS LAST指定nulls之后的nulls排序。这是 未指定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
答案 0 :(得分:2)
来自postgres 9.6 documentation
如果您需要支持" nulls sort low" NULLS选项非常有用。 行为,而不是默认" nulls排序高",在查询中 依赖索引来避免排序步骤。
如果您没有在索引上提供NULLS LAST,查询计划程序很可能需要在返回记录之前对记录进行排序,如果表中包含足够的记录,这可能会导致性能下降。