[SQL SERVER]壓縮新選擇

SQL2014開始提供新的壓縮類型,名為資料行存放區封存(columnstore_archive)

針對資料行存放區資料表和索引,你可以使用封存壓縮來處理較少活動分區,以利減緩硬碟空間用量

這篇我簡單測試這項新技術是否能大幅減緩空間用量

create table testCOLUMNSTORE_ARCHIVE

(id int identity (1,1),

data varchar(20))

 

insert into dbo.testCOLUMNSTORE_ARCHIVE values('ricoisme')

go 300000

ALTER TABLE testCOLUMNSTORE_ARCHIVE REBUILD

SP_SPACEUSED testCOLUMNSTORE_ARCHIVE

使用7496 kb

 

create index idx1 on testCOLUMNSTORE_ARCHIVE(id)

include(data)

建立非叢集索引後,總共使用16608 kb

 

drop index idx1 on testCOLUMNSTORE_ARCHIVE

create nonclustered columnstore index csidx1

     on testCOLUMNSTORE_ARCHIVE(id,data)

     with (DATA_COMPRESSION = columnstore_archive);

刪除非叢集索引後,建立資料行存放區索引並使用資料行存放區壓縮,總共使用8856 kb,和非叢集索引相比,空間使用率大約減少了50%左右。

 

alter index csidx1 on testCOLUMNSTORE_ARCHIVE

     rebuild with ( DATA_COMPRESSION = COLUMNSTORE );

改為一般存放區壓縮,空間使用率也很低。

物件

使用空間總大小

壓縮類型

資料表

7496 KB

無啟用

非叢集索引

16608 KB

無啟用

非叢集資料行存放區索引

8856 KB

columnstore_archive

非叢集資料行存放區索引

8920 KB

columnstore

測試資料行存放區封存壓縮遠大於資料頁和列壓縮,該技術大部分會搭配partition table來封存較少使用的分區,以利減少空間使用量,但較常活動的分區不建議使用壓縮以免影響到效能。

 

參考

[SQL SERVER][Performance]善用資料壓縮#實做

[SQL SERVER][Memo]資料壓縮對記憶體影響

資料壓縮