SQL Server 2016:內存列存儲索引

jopen 9年前發布 | 14K 次閱讀 SQL Server

SQL Server 2016的一項新特性是可以在“內存優化表(Memory Optimized Table)”上添加“列存儲索引(Columnstore Index)”。要理解這是什么意思,我們應該首先解釋術語列存儲索引和內存優化表。

列存儲索引是一種按照列而不是行組織數據的索引。每個數據塊只存儲一個列的數據,最多包含100萬行。因此,如果數據為5列1000萬行,那么就需要存儲在50個數據塊中。當只查詢部分列時,這種數據組織策略特別有效,因為數據庫不會從磁盤讀取用戶不關心的列。

列存儲索引比表掃描要快得多,但沒有傳統的B樹索引那么快。這特別適合于那種無法預測需要什么索引的即時報表。

內存優化表正如它的名字, 它是一個經過優化并一直駐留在內存中的表。這有許多好處,比如鎖無關寫,但它也有很大的局限性。比如,只允許有8個索引,這對于用于即時查詢的表而言限制太大。

SQL Server 2016部分地彌補了這種限制,它允許那8個索引中的其中一個為列存儲索引。但要遵循如下規則:

  • 像內存優化表上的其它索引一樣,列存儲索引必須在表創建時定義。
  • 列存儲索引必須包含基表中的所有列。(在普通表上的列存儲索引不存在這種限制。)
  • 列存儲索引必須包含基表中的所有行。換言之,它不能是“篩選索引(filtered index)”。

一個與內存優化表相關的特性是創建本地編譯查詢。數據庫使用C編譯器將這些查詢編譯成了機器碼,而不使用SQL Server解釋器。使用列存儲索引的查詢可以使用這個選項,而不用總是通過解釋器運行。

查看英文原文: SQL Server 2016: In-Memory Columnstore Indexes

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!