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

时间:2017-08-16 17:11:15

标签: postgresql indexing

我创建了一个索引而没有指定排序或者是第一个/最后一个 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

1 个答案:

答案 0 :(得分:2)

来自postgres 9.6 documentation

  

如果您需要支持" nulls sort low" NULLS选项非常有用。   行为,而不是默认" nulls排序高",在查询中   依赖索引来避免排序步骤。

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