web-dev-qa-db-ja.com

デフォルトでNULLまたはNOT NULL?

MySQLでは、フィールドが必要であることがわかっている場合を除き、常にnullを許可する方が良いですか、またはフィールドにnullが含まれることがわかっている場合を除き、常にNot Nullを使用する方が良いですか?それとも関係ないのですか?

Nullを許可すると、nullステータスを格納するためにレコードごとに追加のビット(またはバイト?)が必要になるため、一部のDBMSではNot Nullを可能な限り使用すると述べています。

41
BenV

ほとんどのDBでは、NOT NULL列は、指定した理由により、格納されているデータの点でより効率的であり、クエリとインデックス付けもより効率的です。したがって、列でNULLを許可したくない場合は、明示的に禁止する必要があります。

追加のNOT NULL制約は、INSERTまたはUPDATEで影響を受ける行ごとにチェックする必要がある可能性があるため、パフォーマンスに若干の影響がありますが、ほとんどのデータベースは相対的に書き込みおよび読み取りが多いため、おそらくこれはありません懸念事項(残りの挿入/更新操作がIOにバインドされ、ボトルネックが大幅に増えるCPUにバインドされた操作であるため、少し時間がかかることはまったくありません)コード(または他の人のコード)が他のコードが予期していない場所に誤ってNULLを置くことがないように、「無料」のデータチェックを提供します。

編集:ピーターがコメントで指摘しているように、上記は一般論であり、mysqlとmssqlについては確かですが、all DMBSには当てはまらない場合があります。この領域におけるその他の複雑な問題には、スパーステーブル(たとえば、MSSQL 2008の実装)のような機能があり、null許容(ではない)列のパフォーマンスダイナミクスを変更します。

25
David Spillett

スキーマの設計とアプリケーションの要件に基づいてこの決定を行う必要があります。ほとんどの場合、パフォーマンスの違いはおそらくどちらの方法でも顕著ではありません。

9