【问题标题】:PostgreSQL performance: Is an index on a NOT NULL column faster than a NOT NULL column?PostgreSQL 性能:NOT NULL 列上的索引是否比 NOT NULL 列快?
【发布时间】:2020-02-14 12:29:22
【问题描述】:

在包含数千万条记录的生产表中,我们发现我们有一个(索引的)字符串列,在域逻辑中永远不会为 NULL。但是,此列目前在架构中不强制为 NOT NULL。

现在我们想知道:查询索引(允许 NULL)列与索引 NOT NULL 列之间是否存在性能差异?还是真的不重要?在这两种情况下,索引在 Postgres 中(/可以)存储的方式是否不同?

【问题讨论】:

  • 我不相信 b-tree 索引有任何性能差异。 Postgres 无论如何都会在索引中分离出NULL 值。如果没有,则标题部分将为空。

标签: sql postgresql indexing null


【解决方案1】:

不,这完全不相关。索引中的NULL 值没有特殊处理。唯一的例外是UNIQUE 索引可以包含多个NULL,但这不会影响性能。

【讨论】:

    【解决方案2】:

    索引保存指定列的值列表。如果列中有NULL 值,它们将不会包含在索引中。 NOT NULL 约束只是对表中允许的内容的定义,不会影响扫描索引的性能(当然,除非架构设计不佳并且您为列指定 NOT NULL 然后你不应该在该列上放置 0 或 'undefined` 的值——这会用一堆无用的值填充索引)。

    简而言之,NOT NULL 只是限制了进入表中的值的种类,而不是在索引中,因此索引性能一般不会受到影响。

    【讨论】:

      猜你喜欢
      • 2010-11-16
      • 1970-01-01
      • 2023-04-03
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      相关资源
      最近更新 更多