SQL Server 2014新聚合columnstore索引介紹
英文原文:Introducing SQL Server 2014's New Clustered Columnstore Indexes
在 SQL Server 2012 中,開發者有創建 columnstore 索引的選項。這些索引擁有提供 10x 性能提升和超過傳統表 7x 壓縮的潛力,但是隨之也帶來了大量的限制。這其中最重要的是他們將基本表送入只讀模式的事實。
SQL Server 2014 中的這個新存儲引擎克服了這些限制。該引擎被稱為聚合 columnstore 索引,它允許高度有效的列有序的數據,同時還允許表在執行 DML 操作(例如 INSERT、UPDATE 和 DELETE)的時候正常運作。
就像正常的聚合索引一樣,聚合 columnstore 索引定義了數據在磁盤上是如何物理存儲的。columnstore 支持的表首先會被組織成稱為行組(rowgroup)的片段。每一個行組保存 102400 到 1048578 行數據。在行組被識別出來之后,它就會被打碎成列片段(column segments),然后對這些列片段進行壓縮,并將結果插入到實際的 columnstore 中。
在處理少量數據(這里的少量指小于 10 萬行數據)的時候,這些數據會被組織到一個稱為 deltastore 的部分。一旦這些數據達到了 deltastore 能夠將其排出的最小大小,那么它們就會被處理為一個新的行組。你可以從下面的 MSDN 圖表中查看這個過程:
在 deltastore 進行轉換的時候它會被關閉。但是無論如何這并不是一個全表阻塞操作。在當前的 deltastore 因為鎖的原因不能訪問的時候,會為給定的表創建一個額外的 deltastore。如果表是分區的,那么每一個區都會有它自己的 deltastore 集。
術語上的注意:Microsoft 現在使用“rowstore”表示按照行和列安排的傳統表。deltastore 實際上是一種類型的 rowstore。
和之前版本的 columnstore 索引不同的是,聚合版本必須包含表中的所有列。這是因為對于剩下的行而言沒有其他的堆或者聚合索引去依賴。事實上,聚合 columnstore 索引根本不能和其他類型的索引結合。