我已经进行了一项测试,将具有一些稀疏列的表与没有稀疏列的表进行比较,并且我看到节省空间为零。
我有两个表,都主要在 varchar 列中存储地址信息。两个表都允许空值,一个具有列稀疏属性集。
我在每个中插入 1000 行默认值(默认值为空)。稀疏列以不同的方式存储空值,所以我相信我应该看到节省空间。但是在运行 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.
*/