SQL Server 2016 列存儲索引功能增強



列存儲索引(columnstore index)在SQL Server 2012中已經引入,其帶來性能提升的同時也有很多限制,比如對帶有列存儲索引的表進行INSERT, UPDATEDELETE時,會遇到如下錯誤提示:


由於這種限制,索引列存儲索引並不太適合在SQL Server 2012 OLTP DB中應用。不過,SQL Server 2016對列存儲索引做了很多改進,其中我覺得最大的變化是可更新的列存儲索引,即可以直接對帶有列存儲索引的表進行INSERT, UPDATEDELETE,因此,我們可以在SQL Server 2016環境中嘗試應用這以功能,已提升查詢性能。若想具體瞭解列存儲索引的概念、特徵、創建及使用,可參考我之前整理的Blog

SQL 2016環境測試的過程中,我發現列存儲索引對於有聚集函數的T-SQL,有很好的性能提升,比如下面這個示例,性能提升約15

JOIT表有1500833筆記錄,複製一份到JOIT_CSI表,2張表的唯一區別是JOIT_CSI有非聚集列存儲索引, 在統計列SERNUM個數的查詢中,可以發現JOIT需要7210ms,而JOIT_CSI只有463ms,性能提升約15倍。感興趣的,可以去發掘其他性能提升的最佳實踐。




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