2011-04-17 22 views
0

データベースの実装方法と、データのクエリと格納の処理方法は異なります。データベースにはどのような影響がありますか?

ヌル値の属性を持つとストレージスペースを消費しますか?

ヌル値の属性を持つことは、データのクエリの速度に影響しますか?基本的には、データが存在するかどうかにかかわらず、より高速または低速のクエリを実行します。注意。私はどのようにデータのクエリを高速化するのか尋ねていません。

私の質問は一般的なものですが、SQL ServerやSQLiteなどの特定のデータベースの実装については自由に回答できます。

答えて

2

私が知っているデータベースでは、NULL の値は、NULL以外のものより多くの領域を消費しません。それでも最大サイズが許されます。ただし、列がNULL可能であるという事実は、余分なストレージを消費する可能性があります。

これは、可能な値に加えて、列がNULLであるかどうかを各行に保存する必要があるからです。しかし、それはストレージの面でかなり効率的です。

NULL可能な列の場合、クエリにかかる余分な時間はたかだかわずかです。

もっと時間がかかるかどうか本当に気にする必要はありません。データベースの設計は、データの速さではなく、データの要件によって駆動されます。パフォーマンスを完全に無視する必要はありませんが、カラムにNULL値を格納する必要がある場合は、パフォーマンスヒットに関係なく、その値を保持する必要があります。

+1

実際には、多くのテーブルを導入することでNULL列を避けることができます。逆に、NULLカラムを許可することによってテーブルを削除することもできます。これは、しばしば、パフォーマンスの向上および/またはクエリの単純化のために行われる非正規化の一形態と考えられている。 (日付の[最初の正規形](http://en.wikipedia.org/wiki/First_normal_form)はNULL値を許可しません) –

+0

私はTedに同意します:実際にはnullを保存することはほとんどありません**。 cf. http://missingdata.wordpress.com/2007/07/26/the-final-null-in-the-coffin/ – Peter

1

はい、NULLは実際に記憶領域を占有します。通常、フィールドはNULLステータスを格納するために1ビットを使用するため、NULLであるかどうかにかかわらず、テーブルのすべての行がこの余分なビットを使用します。これは、NULLと他の値(例えば、NULLと0の間)を区別する唯一の方法である。

これが問題になる場合は、余分な機能が必要ない場合は、フィールドをNOT NULLとマークしてください。

2

ディスク容量に関して、SQL Serverには以下の内容が適用されます(おそらく、確かではありませんが、他のエンジンにも当てはまるかもしれません)。

固定サイズのデータ​​型は、デフォルトのデータ型サイズとしてNULLの値を格納します。数字は0、文字は ''です。 CHAR(5)列があるとします:NULL値で5バイトを入力します。

可変サイズのデータ​​型は、値が空の値NULLを格納します。 VARCHAR(10)の列があるとします:NULLの値で0バイトを入力します。

クエリに関しては、すべてのデータベースに対してクエリによって異なります。いくつかのコマンドでは、他のコマンドでは比較が行われます。このSQLite pageの最初のテーブルはあなたの好奇心を満たすはずです。

関連する問題