有些人试图避免NULL
价值观,声称这种逻辑会造成混乱。
我不是其中之一。NULL
值仅适用于没有数据的列。它们无疑是存储“空”列的最便宜的方式-磁盘空间和性能(主要影响是较小的表和索引)
一旦 了解 了NULL
价值的本质,就没有理由避免它们。Postgres提供了多种函数来处理NULL。colaesce()
,nullif()
,concat()
,concat_ws()
,…
通常,就 而言, 胜过 并且两者均由对数 。但是,即使是简单的触发器也很便宜。NOT NULL
约束的成本几乎为零。同样,所有这些仅影响写操作,但是在大多数应用程序中,读操作占主导地位。
因此,对性能(除次优索引和查询之外)的影响 是表和索引的 ,或更重要 。在大多数情况下,较大的元组会导致性能降低。满足查询所必须读取的数据页数相应增加。可用的高速缓存内存已较早饱和。
我还没有基准测试,但是最好还是针对您的特定环境进行测试。这些只是简单的经验法则。现实要复杂得多。