Postgres 9.x中的成本检查限制是多少?

时间:2013-10-02 13:15:43

标签: sql postgresql benchmarking postgresql-9.1 check-constraints

我想知道是否有一些基准来比较在60列的表上插入一些检查约束的成本,其中20我想插入NotEmpty约束和6行NotNull。

我的情况是我在我的桌子上有空值和空值(在我的情况下,这意味着总是“没有数据”)。

我想用一个统一数据值。

这就是我想在列上插入NotEmpty约束的原因,因为我读取的空值不像空值那么重(以字节大小)(并且尊重他的真实含义)。

但是从另一方面来看NotNull Constraint比检查约束更深层次,也许它表现更好......

当我做这种改变时,我提出了这个问题:   - 在INSERT和UPDATE操作中Postgres 9.x中的成本检查约束多少?

因为如果花费很多,那么这两种情况下的情况可能会更好,而且当我使用合并函数检索它时...

您的经历或基准是什么?

1 个答案:

答案 0 :(得分:3)

有些人试图避免使用NULL值,声称逻辑会令人困惑。

我不是其中之一。 NULL值适用于没有数据的列。它们肯定是最便宜的储存方式。列 - 用于磁盘空间和性能(主要影响是较小的表和索引):
Does not using NULL in PostgreSQL still use a NULL bitmap in the header?
Does setting "NOT NULL" on a column in postgresql increase performance?
Do nullable columns occupy additional space in PostgreSQL?

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

一般来说,就效果而言, NOT NULL约束胜过 CHECK约束并且都击败了触发器强>通过日志拍摄。但即便是简单的诱因也很便宜。 NOT NULL约束的成本几乎为零。此外,所有这些仅影响写操作,但在大多数应用程序中,读操作占主导地位。

因此,对性能(次优索引和查询除外)的最相关影响是表和索引的大小,或者更重要的是,每个数据页的元组数。对于大多数用例而言,较大的元组会导致性能降低。必须读取以满足查询的数据页数相应增加。可用的高速缓存存储器早先已经饱和。

我没有准备基准,但无论如何最好测试你的特定环境。这些只是简单的经验法则。现实要复杂得多。