简体   繁体   English

SQL Server:为什么“ SPARSE”不影响空间?

[英]SQL Server: why 'SPARSE' does not impact for a space?

Why alter table <> alter column<> SPARSE does not have an effect in cases 1-3 but only in case 4? 为什么alter table <> alter column <> SPARSE在情况1-3中无效,而在情况4中无效? Ie can we say that column can be declared as SPARSE only when creating? 即可以说仅在创建时才能将列声明为SPARSE吗?

I have tested this code in SQL2012. 我已经在SQL2012中测试了此代码。

-- 1
CREATE TABLE UnSparsed(ID INT IDENTITY(1,1),
FirstCol INT,
SecondCol VARCHAR(100),
ThirdCol SmallDateTime)
GO

INSERT INTO UnSparsed SELECT TOP 50000 NULL,NULL, NULL
FROM master..spt_values v1, 
     master..spt_values v2

GO
sp_spaceused 'UnSparsed'
GO
--- 2
alter table UnSparsed alter column FirstCol int SPARSE NULL
alter table UnSparsed alter column SecondCol VARCHAR(100) SPARSE NULL
alter table UnSparsed alter column ThirdCol SmallDateTime  SPARSE NULL
GO
sp_spaceused 'UnSparsed'
GO
--- 3
truncate table UnSparsed
GO
INSERT INTO UnSparsed SELECT TOP 50000 NULL,NULL, NULL
FROM master..spt_values v1, 
     master..spt_values v2

GO
sp_spaceused 'UnSparsed'
GO
DROP TABLE UnSparsed
GO
--- 4
CREATE TABLE UnSparsed(ID INT IDENTITY(1,1),
FirstCol INT SPARSE NULL,
SecondCol VARCHAR(100)  SPARSE NULL,
ThirdCol SmallDateTime  SPARSE NULL)
GO
INSERT INTO UnSparsed SELECT TOP 50000 NULL,NULL, NULL
FROM master..spt_values v1, 
     master..spt_values v2

GO
sp_spaceused 'UnSparsed'
GO

在此处输入图片说明

It seems need to do 看来需要做

ALTER TABLE t REBUILD; 

after this action all is ok. 完成此操作后一切正常。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM