列存儲索引
列存儲索引被標榜为SQL Server 2012中最大的可擴展性改進,現在社區技術預覽(CTP)中已經可用了。列存儲索引为每個列把數據打包到磁盤頁的獨立集合中。這是相對於傳統的每頁存儲多行的方法而言的。
微軟公司宣稱使用這種新的索引方法有幾個優勢。舉例來說,存儲列這種方式使得計算特殊查詢需要的列能輕松快速地提取。這是因为該索引壓縮了數據,平均來看列比整個行更冗餘,因此可壓縮性也更高。磁盤訪問模式和緩沖允許數據被更加快速地提取和保留。在给定表中存在的列越多,或者你計劃添加到给定表中的列越多,列索引给表帶來的擴展效果就越好。
從擴展性的角度來看,優點是很明顯的。你可以给數據庫擴充容量,而無需擔心這會對BI查詢(查詢的數據可能達到數十億行)性能造成影響。微軟公司自己前期工作發現,請求巨量行數據的各種查詢訂單程數量級激增,這跟你手頭的數據類型有關。
需要說明的一點是,一旦你给表增加了列存儲索引,它就變成只讀的了。具體來說,你不能使用“Insert,Update,Delete”或者“Merge”語句,也不能使用批量操作添加數據。我猜這是避免列存儲索引被重复更新的一種手段,進而避免損失擺在首位的性能優勢。
如果你需要在沒有列存儲索引的情況下運行查詢(例如,判斷净性能增益),你可以在T-SQL查詢中使用“IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX”選項,從該選項的名稱也可以看出,微軟公司已經計劃推出集群的列存儲索引。