【问题标题】:How to create an index properly for DESC NULLS LAST sorting如何为 DESC NULLS LAST 排序正确创建索引
【发布时间】:2018-01-24 22:37:25
【问题描述】:

我创建了一个索引但没有指定排序或空值 first/last 例如:

CREATE INDEX index_name ON TABLE table_name (date)

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

我在 PostgreSQL 文档中读到,

NULLS FIRST 指定空值排在非空值之前。这是 指定 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】:

来自 postgres 9.6 documentation

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

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

【讨论】:

    猜你喜欢
    • 2018-12-15
    • 2017-11-02
    • 1970-01-01
    • 2014-07-30
    • 2021-07-03
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    相关资源
    最近更新 更多