SQL Server 2016:內存列存儲索引

SQL Server 2016:內存列存儲索引

 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章