若想為加強數據庫查詢的性能,可通過SQL Server 2012 在表中建立列式的索引,提高工作的效率。文章主要分析了列存儲縮影存儲的原理,探討列存儲索引應用局限和優勢,以便相關用戶能夠在列式索引下挖掘各種交互式數據,進而獲取既有數據商業價值。
【關鍵詞】SQL Server 2012 列存儲 索引技術 有效應用
1 前言
SQL Server 2012主要是應用列式的存儲進行索引,這種方式可以提升數據庫查詢的效率。通過結合其他的新功能與全新索引,在特定應用的場景下,能夠大幅度提高數據庫查詢的性能,尤其一些決策與支持類查詢,能夠提高10倍及以上的效率。數據查詢性能提升,主要是經過SQL Server的管理界面以及T-SQL的語句實現,所以能夠和SQL Server Reporting Services全部報表的解決方案兼容。
2 分析行存儲以及列存儲優勢與缺陷
列存儲的索引可以存儲與分組每一列數據,再和所有列進行聯接,組成完整的索引,這種索引方式與傳統索引不一樣,傳統的索引是存儲與分組每行數據,再對所有行進行聯接,組成索引。
2.1 列存儲和行存儲
在SQL Server系統中,Page屬于數據存儲基本的單位,數據行為實際數據存儲的單位,在出現Page Header以后,就開始存儲于Page中,于Page中根據行進行存儲的記錄方式即為行存儲。如果數據是根據單列并不是多行來持續存儲,那就是列存儲。
2.2 行存儲缺陷
從圖1中能夠看出,在SQL Server 處理查詢數據時,會將全部的索引頁都提取出來,這樣就會提取到無用部分,話句話說,會對全部列記錄進行讀取,不需要的也被讀取。如果讀取了不需要數據,不僅會導致內存被大量浪費,而且會增加I/O,嚴重影響了系統整體的性能。
2.3 列存儲優勢
從圖一中不難看出,磁盤每一個Page只可以對單列數值進行存儲,并不能存儲整行數值。所以應用壓縮算法,效率會比較高,主要因為壓縮算法可以作用在同類型數據上。如:假設一張三列數據表,從左至右分別是int與varchar、bool的類型,該表一共有一百條記錄。對int類型第一列的數據而言,使用壓縮的算法比較容易,并且壓縮率也相對較高。簡言之,無需對該表全部列進行訪問,只需要訪問需要子集,這樣不僅能夠降低磁盤I/0,而且可以提高緩存,提升磁盤存儲的利用率。
3 列存儲局限和特征
3.1 SQL Server的列存儲技術特征
數據分裂的格式:對每個列數據實時存儲與分組。通過SQL Server的查詢與處理以后,能夠應用新數據進行布局,同時對查詢執行的時間進行改進。
提高查詢結果的速率,列存儲的所以容易因為下述因素更快生成相應的結果。僅需讀取所需要列,所以從磁盤讀至內存,再從內存到處理器的緩存,這樣可以減少數據量;列經過高度的壓縮,在很大程度上減少了移動字節數與讀取字節數;很多數據的查詢不會涉及到表中全部列,所以大多數列并不會進入到內存中,將其和出色壓縮的方法結合,能夠對緩沖池的使用率進行改善,降低總的I/O;高級查詢的執行技術可以簡化處理列塊,降低CPU的使用率。
3.2 列存儲的索引局限性
所含列數需要控制于1024以內;不能聚集,只可以將列存儲聚集以后才可以使用;并不是唯一的索引;不可以建立索引視圖或是視圖;不涵蓋稀疏列;不可以作為外鍵或是主鍵;不可以通過ALTER INDEX的語句進行更改。需要在刪除以后重新建立列存儲的索引;不可以通過INCLUDE的關鍵字進行創建;不可以含有DESC或是ASC的關鍵字,按照壓縮算法排序列存儲的索引,不可以在索引中排序,可以根據搜索算法排序索引中數值;不可以使用或是保留傳統索引方法所統計的信息;不能對里存儲的索引表進行更新。
分析內存受限情況:目前,類存儲的處理根據內存中的處理需要實施了相應的優化。應用SQL Server能夠完善若干的機制,在很大程度上改善大多數的數據結構或是數據使用情況,尤其在內存不足的時候依然可以保證數據不會外溢。若內存限制比較嚴重,在處理的過程中,需要應用行內存進行處理。在部分實例中,會選取列存儲的索引當做訪問的方法,然而內存不足時,無法生成相應數據的結構,就會先從操作列存儲開始,再默認較慢代碼的路徑,在數據查詢時,就會因為內存受到嚴重限制,進而降低了性能。
列存儲的索引生成要求內存量一般如下: 8 MB×索引中列數×DOP/并行度,一般情況下,內存的要求會伴隨字符串列比例的提高而不斷地增加,所以需要減少DOP ,以降低列存儲的索引生成列所需內存。部分表達式計算比傳統表達式的計算效率高:在應用列存儲的索引時,應該應用批處理的模式對部分常見的表達式進行計算,并不是重復的根據某一特定模式計算。應用列存儲的索引不僅可以帶來計算效率快的優勢,而且可以加速批處理與數據查詢的效果,并且在批處理時,也不會啟動每個查詢的運算符。此外,應用列存儲的索引并不支持SEEK運行:若查詢需要返回行一部分,優化器則不會選取列存儲的索引,如needle-in-the-haystack的類型查詢。若應用表提示的FORCESEEK,優化器就可以不需要考慮到類存儲的索引。同時類存儲的索引不可以結合以下的功能:行壓縮、頁與vardecimal的存儲格式;復制;跟蹤更改;變更數據的捕獲;文件流。
4 結論
總而言之,SQL Server 2012提高的相關的查詢功能、列存儲索引,在技術方面取得突破性發展,能夠給數據庫的查詢提供性能的優勢。并且企業最終用戶能夠應用熟悉報表的工具進行查詢,旨在較短時間里獲取數據商業的價值,使得企業變成主要獲益者。
參考文獻
[1]江凌,楊平利,楊梅.基于ADO.NET技術訪問SQL Server數據庫的編程實現[J].現代電子技術,2014,18(08):95-98.
[2]王蕊.基于ObjectARX和SQL Server的AutoCAD圖形數據存儲[J].電子測試,2016,21(12):87-88.
[3]張華東,邵秀麗,吳軍.SQL Server數據庫到HBase數據庫的模式轉換和數據遷移研究[J].智能計算機與應用,2016,6(05):24-30,34.
作者簡介
王玉銀(1982-),女,山西省芮城縣人。碩士學位。講師,計算機專任教師。研究方向為計算機應用技術。
作者單位
桂林理工大學博文管理學院信息工程學院 廣西壯族自治區桂林市 541006