収納スペースの面でより効率的なのですか?
nullable int
カラムがいっぱいです。int
カラムが0で満杯です。
ヌル状態を保存するために1つの余分な情報が必要ですが、null値を指定すると、データベースがnullのintに32ビットを割り当てないように保存されますか?
(nullのセマンティクスとヌルの意味は、この質問のために重要ではありません)必要なストレージスペースのint NULL可能などの固定幅フィールドの場合
収納スペースの面でより効率的なのですか?
nullable int
カラムがいっぱいです。int
カラムが0で満杯です。ヌル状態を保存するために1つの余分な情報が必要ですが、null値を指定すると、データベースがnullのintに32ビットを割り当てないように保存されますか?
(nullのセマンティクスとヌルの意味は、この質問のために重要ではありません)必要なストレージスペースのint NULL可能などの固定幅フィールドの場合
にかかわらず、値がnullであるかどうかを常に同じです。
可変幅ヌル入力可能フィールドの場合、値 'NULL'はゼロバイトの記憶領域をとります(値がヌルかどうかを格納するビットは無視されます)。
これについての参考資料はありますか、実験的な証拠から分かりますか? –
これはほぼ毎週尋ねられるので、私は知っています。 ;-) –
カラムのスペース(または実際には行)がSQL Serverによって予約されているが、実際には巨大なデータベースにnull値のカラムを追加すると実際に瞬間的になり、doesn (たとえば、デフォルト値でNOT NULLを指定した場合に起こる)割り当てを含むように見えます。これは、最初にその値を含む行を書き込もうとすると、SQL Serverはこの新しい列に一連の領域を割り当てますか? – Groo
SQL Server 2008を使用していて、カラムにNULL値の数が多いと思われる場合は、investigate Sparse Columnsをお勧めします。それらはNULL値を格納するために最適化されています。
SQL Server 2008では、主にNULLの列に対してSparse columnsが導入されました。
NULLの行のSPARSE列は、0ビットの記憶域を使用します。しかし、値があれば4バイトのペナルティを支払う。
0はnullではありません。あなたがフィールドの値を持っていない場合は、そこにゼロを置かないでください!本番データベースのゼロが本当のゼロであるか偽のヌルであるかを知る方法がないため、本質的に修正不可能なバグを何度も見つけました。ヌルを受け入れる - はい、もう少しコーディングが必要ですが、とにかくそれを受け入れます。
この場合、フィールドはアプリケーションフラグに過ぎず、ゼロまたはヌルのチェックは同じであり、ストレージの考慮点だけです。 –
私は2008 R2と一緒に作業していますが、他のバージョンの動作が異なる場合は、知っておきたいことです。 –
D'oh、 "null storage"は検索しましたが、 "null space"は検索しませんでした。重複しないと合意し、そこの答えはこの質問に答えます。 –