PostgreSQL 性能:NOT NULL 列上的索引是否比 NOT NULL 列快?



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

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

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

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

简而言之,NOT NULL只是限制表中的值类型,而不是索引中的值类型,因此索引性能通常不会受到影响。

最新更新