[SQL SERVER]SQL2016-Columnstore Indexes增強(1)

SQL Server 2012推出Columnstore indexes第一個版本,

主要是提高OLAP查詢效能,並改用欄位為單位方式進行儲存,

但諸多限制對OLTP環境相當不有善(建立後資料表變唯讀、只能使用drop and create模式..等),

現在SQL Server 2016讓我們看到Columnstore indexes這幾年堅持及一路走來的改善。

由於我工作環境大多為OLTP,所以早期我根本不會拿自己正式環境來建立Columnstore Indexes,

但Columnstore Indexes走過SQL2012、2014和2016,早已不是以前吳下阿蒙,

這篇先來看看TSQL方面改善

 

定義資料表可直接定義Clustered 和 Nonclustered Columnstore Indexes

create table Test_CCI
(
Serial int not null 
,c2 varchar(10)
,index PK_Test_CCI clustered columnstore 
)
insert into Test_CCI select 1,'rico'

create table Test_NCCI
(
Serial int not null
,c2 varchar(10)
,c3 nvarchar(20)
,c4 date
,index NCCIdx1 nonclustered columnstore(c2,c4)
)
insert into Test_NCCI select 1,'rico',N'全文檢索','2016-01-15'

create table Test_NCCI_Filter
(
Serial int not null
,c2 varchar(10)
,c3 nvarchar(20)
,c4 date
,index NCC_Filter_Idx1 nonclustered columnstore(c2,c4) 
  where serial>100
)
insert into Test_NCCI_Filter select 101,'rico',N'全文檢索','2016-01-15'

 

定義IN-Memory資料表可直接定義Clustered Columnstore Indexes

create table TestMemory_CCI
(
Serial int not null
,c2 varchar(10)
,c3 nvarchar(20)
,c4 date
,constraint PK_TestMemory_CCI primary key nonclustered(Serial)
--,index NCCIdx1 nonclustered columnstore(c2,c4) 目前SQL2016還不支援 nonclustered columnstore
,index CCIdx clustered columnstore 
) with(memory_optimized=on,durability=schema_and_data)
insert into TestMemory_CCI select 1,'rico',N'全文檢索','2016-01-15'

 

Alter Index

-- This command will force all CLOSED and OPEN rowgroups into the columnstore.  
alter index PK_Test_CCI ON Test_CCI   
reorganize with (compress_all_row_groups = ON);

 

IN-Memory資料表支援Alter

--刪除columnstore index,因為Memory資料表新增欄位不能存在columnstore index
alter table TestMemory_CCI drop index CCIdx
--新增欄位
alter table TestMemory_CCI add c5 int null;
--新增非叢集索引
alter table TestMemory_CCI add index idx1(c2,c4)

Enjoy SQL Server 2016

 

參考

Columnstore Indexes Versioned Feature Summary

[鐵人賽][Denali 新特性探險26]Columnstore Indexes

Altering Memory-Optimized Tables

Indexes for Memory-Optimized Tables

Columnstore Indexes Defragmentation

Columnstore Index Defragmentation using REORGANIZE Command