SQL Server 2008の新機能「SPARSE COLUMN」に関するいくつかのチュートリアルを行った後、列の値が0またはNULLの場合はスペースをとらないが、値がある場合は通常の4倍のスペースをとることがわかりました。 (非スパース)列が保持されます。
私の理解が正しければ、なぜデータベース設計のときにそのために行くのですか?そして、私がそれを使用すると、どのような状況になりますか?
また、好奇心から、列が疎列として定義されている場合、どのようにスペースが予約されないのですか(つまり、その内部実装は何ですか?)
あなたはそれを間違って読んでいます-それは決して4倍のスペースを取りません。
具体的には、4x(4で乗算)ではなく、4 *(4バイト、脚注を参照)と表示されます。スペースが正確に4倍である唯一のケースはchar(4)であり、NULLが64%以上存在する場合に節約になります。
「*長さは、タイプに含まれるデータの平均に2バイトまたは4バイトを加えたものに等しくなります。」
| datetime NULL | datetime SPARSE NULL | datetime SPARSE NULL |
|--------------------|----------------------|----------------------|
| 20171213 (8 bytes) | 20171213 (12 bytes) | 20171213 (12 bytes) |
| NULL (8 bytes) | 20171213 (12 bytes) | 20171213 (12 bytes) |
| 20171213 (8 bytes) | NULL (0 bytes) | NULL (0 bytes) |
| NULL (8 bytes) | NULL (0 bytes) | NULL (0 bytes) |
行ごとに1回だけでなく、4バイトを失います。しかし、nullではない行のすべてのセルに対して。