小编典典

Postgres 9.x中CHECK约束的成本是多少?

sql

我有一张有60列的桌子。其中的20个是“ NotEmpty”和6个“ NotNull”。

我有空值和空值(在我的情况下,它们始终表示“无数据”)。我想只用一种约束来统一列。

我已读取null值很便宜(以字节为单位)。那么也许使用NotEmpty约束?但是,也许NotNull约束的执行效果更好?或者coalesce()在检索数据时最好同时拥有值和用途?

什么是成本CHECK的制约INSERTUPDATEPostgres里9.x中?您的经历如何?有基准吗?


阅读 177

收藏
2021-03-23

共1个答案

小编典典

有些人试图避免NULL价值观,声称这种逻辑会造成混乱。

我不是其中之一。NULL值仅适用于没有数据的列。它们无疑是存储“空”列的最便宜的方式-磁盘空间和性能(主要影响是较小的表和索引)

一旦 了解
NULL价值的本质,就没有理由避免它们。Postgres提供了多种函数来处理NULL。colaesce()nullif()concat()concat_ws(),…

通常,就 性能 而言, NOT NULL约束 胜过 CHECK约束, 并且两者均由对数 触发触发
。但是,即使是简单的触发器也很便宜。NOT NULL约束的成本几乎为零。同样,所有这些仅影响写操作,但是在大多数应用程序中,读操作占主导地位。

因此,对性能(除次优索引和查询之外)的影响 最大的 是表和索引的 大小 ,或更重要 的是每个数据页的元组数
。在大多数情况下,较大的元组会导致性能降低。满足查询所必须读取的数据页数相应增加。可用的高速缓存内存已较早饱和。

我还没有基准测试,但是最好还是针对您的特定环境进行测试。这些只是简单的经验法则。现实要复杂得多。

2021-03-23