簡(jiǎn)介
之前已經(jīng)寫過兩篇介紹列存儲(chǔ)索引的文章,但是只有非聚集列存儲(chǔ)索引,今天再來簡(jiǎn)單介紹一下聚集的列存儲(chǔ)索引,也就是可更新列存儲(chǔ)索引。在SQL Server 2012中首次引入了基于列存儲(chǔ)數(shù)據(jù)格式的存儲(chǔ)方式。叫做“列存儲(chǔ)索引”。前一篇我已經(jīng)比較了行存儲(chǔ)索引與非聚集的列存儲(chǔ)索引(http://www.cnblogs.com/wenBlog/p/5682024.html)。其中對(duì)于在小表的指定值或者小范圍的查詢來講,尤其針對(duì)事務(wù)性的負(fù)載行存儲(chǔ)是很合適的。但是對(duì)于分析性負(fù)載像數(shù)據(jù)倉(cāng)庫(kù)和BI,在查詢中將會(huì)對(duì)大量數(shù)據(jù)進(jìn)行全掃描,例如事實(shí)表,這時(shí)候列存儲(chǔ)索引就是更好地選擇。
列存儲(chǔ)索引結(jié)構(gòu)
在列存儲(chǔ)索引中,數(shù)據(jù)按照獨(dú)立列組織到一起形成索引結(jié)構(gòu)。每列都數(shù)據(jù)都位于被高度壓縮的數(shù)據(jù)集中,叫做數(shù)據(jù)段。這個(gè)數(shù)據(jù)段只包含該列的值,對(duì)于大型表它分到多個(gè)數(shù)據(jù)段中,每個(gè)數(shù)據(jù)段中只含有100萬行數(shù)據(jù),這就叫做行組、數(shù)據(jù)段由一個(gè)或者多個(gè)數(shù)據(jù)頁組成。數(shù)據(jù)將在內(nèi)存和硬盤上以數(shù)據(jù)段的形式傳輸。
這種索引提高了數(shù)據(jù)倉(cāng)庫(kù)的查詢效率。這種通過壓縮獲得數(shù)據(jù)格式要比B-Tree結(jié)構(gòu)的壓縮率高7倍多。同時(shí)由于列存儲(chǔ)索引使用了批處理模式執(zhí)行,數(shù)據(jù)處理也是批處理的,較少了CPU的使用。列存儲(chǔ)索引強(qiáng)化了檢索數(shù)據(jù)的速度,與行存儲(chǔ)不同的是不用查詢所有列。因?yàn)檫@個(gè)原因,更少數(shù)據(jù)被讀取到內(nèi)存中,再到處理器緩存處理。相關(guān)的這些因素都會(huì)減少硬盤IO,提高整體查詢的性能。
在2014中列存儲(chǔ)索引有以下限制:
最多支持1024列在你的索引中;
列存儲(chǔ)索引不能被定義為唯一性索引;