回答:
ほとんどのDBでは、NOT NULL
列は、指定した理由により格納されたデータに関してより効率的であり、クエリとインデックス作成もより効率的です。したがって、列でNULLを許可する場合を除き、明示的に禁止する必要があります。
NOT NULL
INSERTまたはUPDATEの影響を受ける行ごとに余分な制約をチェックする必要がある可能性があるため、わずかなパフォーマンスへの影響がありますが、ほとんどのデータベースは相対的なライトライトとリードヘビーなので、これはおそらく問題ではありません(少し余分な時間がかかることはほとんどありません。挿入/更新操作の残りの部分がIOにバインドされるCPUバインドの操作であり、非常に重要なボトルネックです。コード(または他の人のコード)が誤ってNULLを置くことがないようにデータをチェックします。他のコードが予期しない場所にNULLを配置し、存在する場合に誤った結果を与える可能性があります。
編集:Peterが彼のコメントで指摘しているように、上記は一般論であり、すべての DMBSに当てはまるわけではありませんが、mysqlとmssqlには確かにそうです。この領域の他の複雑な問題には、nullを許可しない列のパフォーマンスダイナミクスを変更するスパーステーブル(MSSQL 2008の実装など)などの機能が含まれる場合があります。
スキーマ設計とアプリケーションの要件に基づいてこの決定を行う必要があります。ほとんどの場合、パフォーマンスの違いはおそらくどちらの場合でも顕著ではありません。
NULL
場合にのみ許可する必要NULL
があります。