NULL
を避けようとする人もいます 値、論理を主張することは混乱するでしょう。
私はその一人ではありません。 NULL
データのない列の場合、値は問題ありません。これらは確かに「空の」列を格納するための最も安価な方法です-ディスク容量とパフォーマンス(主な効果はより小さなテーブルとインデックスです):
- PostgreSQLでNULLを使用しない場合でも、ヘッダーでNULLビットマップを使用しますか?
- postgresqlの列に「NOTNULL」を設定するとパフォーマンスが向上しますか?
- null許容列は追加のスペースを占有しますかPostgreSQLでは?
理解したら NULL
の性質 値、それらを回避する理由はありません。 Postgresは、NULLを処理するためのさまざまな関数を提供します。 colaesce()
>
、 nullif()
、 concat()
、concat_ws()
、...
一般的に、パフォーマンスに関する限り 懸念されるのは、NOTNULL制約です。 CHECK制約を打ち負かす 両方ともトリガーを打ち負かします ログショットで。しかし、単純なトリガーでさえ安価です。 NOT NULL
のコスト 制約はほとんどありません。また、これらはすべて書き込み操作にのみ影響しますが、ほとんどのアプリケーションでは読み取り操作が支配的です。
したがって、パフォーマンスへの最も関連性のある影響(次善のインデックスとクエリは別として)はサイズです。 テーブルとインデックスの数、またはさらに重要なことに、データページあたりのタプルの数 。タプルが大きいと、ほとんどのユースケースでパフォーマンスが低下します。クエリを満たすために読み取る必要のあるデータページの数は、それに応じて増加します。使用可能なキャッシュメモリが早く飽和します。
ベンチマークの準備はできていませんが、とにかく特定の環境でテストするのが最善です。これらは単純な経験則です。現実はもっと複雑です。