web-dev-qa-db-ja.com

SPARSE COLUMNを使用する理由と時期(SQL SERVER 2008)

SQL Server 2008の新機能「SPARSE COLUMN」に関するいくつかのチュートリアルを行った後、列の値が0またはNULLの場合はスペースをとらないが、値がある場合は通常の4倍のスペースをとることがわかりました。 (非スパース)列が保持されます。

私の理解が正しければ、なぜデータベース設計のときにそのために行くのですか?そして、私がそれを使用すると、どのような状況になりますか?

また、好奇心から、列が疎列として定義されている場合、どのようにスペースが予約されないのですか(つまり、その内部実装は何ですか?)

62
priyanka.sarkar

あなたはそれを間違って読んでいます-それは決して4倍のスペースを取りません。

具体的には、4x(4で乗算)ではなく、4 *(4バイト、脚注を参照)と表示されます。スペースが正確に4倍である唯一のケースはchar(4)であり、NULLが64%以上存在する場合に節約になります。

「*長さは、タイプに含まれるデータの平均に2バイトまたは4バイトを加えたものに等しくなります。」

4
mbourgon
| 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ではない行のすべてのセルに対して。

0
Ian Boyd