Windows wordpress Python Android 开源 Firefox centos php linux 云计算 google 微软 shell mysql java apache Ubuntu 程序员 nginx 编程

SQL Server 2014新聚合columnstore索引介紹

 

   在 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 圖表中查看這個過程:

SQL Server 2014新聚合columnstore索引介绍

      

  在 deltastore 進行轉換的時候它會被關閉。但是無論如何這並不是一個全表阻塞操作。在當前的 deltastore 因為鎖的原因不能訪問的時候,會為給定的表創建一個額外的 deltastore。如果表是分區的,那麽每一個區都會有它自己的 deltastore 集。

        術語上的註意:Microsoft 現在使用“rowstore”表示按照行和列安排的傳統表。deltastore 實際上是一種類型的 rowstore。

        和之前版本的 columnstore 索引不同的是,聚合版本必須包含表中的所有列。這是因為對於剩下的行而言沒有其他的堆或者聚合索引去依賴。事實上,聚合 columnstore 索引根本不能和其他類型的索引結合。

延伸阅读

评论