いくつかのスパース列を含むテーブルとスパース列を含まないテーブルを比較するテストを実行しましたが、スペースがまったく節約されていません。
2 つのテーブルがあり、どちらも主に varchar 列にアドレス情報を格納しています。どちらのテーブルも null を許可し、一方のテーブルには列の疎なプロパティ セットがあります。
それぞれに 1000 行のデフォルト値を挿入します (デフォルト値は null です)。スパース列は null を別の方法で格納するため、スペースを節約できると思います。しかし、sp_spaceUsed を実行すると、節約が見られません。私が間違っていること、または私の理解が間違っている場所についてのアイデアはありますか?
Create Table SparseColTest_NonSparse
(
AddressID int identity(1,1) not null,
AddressLine1 varchar(500) null,
AddressLine2 varchar(500) null,
AddressLine3 varchar(500) null,
PostalCode varchar(20) null,
Country varchar(50)
)
Create Table SparseColTest_Sparse
(
AddressID int identity(1,1) not null,
AddressLine1 varchar(500) sparse null,
AddressLine2 varchar(500) sparse null,
AddressLine3 varchar(500) sparse null,
PostalCode varchar(20) sparse null,
Country varchar(50)
)
declare @i int
set @i = 0
while(@i <= 100000)
BEGIN
insert into SparseColTest_NonSparse Default values
insert into SparseColTest_Sparse default values
set @i = @i + 1
END
exec sp_spaceUsed 'SparseColTest_NonSparse'
exec sp_spaceUsed 'SparseColTest_Sparse'
/*
name rows reserved data index_size unused
----------------------------- -------------------- ------------------ ------------- ----- ------------------ ------------------
SparseColTest_NonSparse 210003 2888 KB 2840 KB 8 KB 40 KB
name rows reserved data index_size unused
----------------------------- -------------------- ------------------ ------------- ----- ------------------ ------------------
SparseColTest_Sparse 210003 2888 KB 2840 KB 8 KB 40 KB
****NOTE - even with 210k rows sparse and non sparse tables are identical in size.
*/