一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - 揭秘SQL Server 2014有哪些新特性(3)-可更新列存儲聚集索引

揭秘SQL Server 2014有哪些新特性(3)-可更新列存儲聚集索引

2020-04-06 14:10hebedich Sql Server

可更新的列存儲索引作為SQL Server 2014的一個關鍵功能之一,在提升數據庫的查詢性能方面貢獻非常突出。據微軟統計,在面向OLAP查詢統計類系統中,相比其他SQL傳統版本的數據庫,報表查詢的性能最大可提升上十倍。

簡介

列存儲索引其實在在SQL Server 2012中就已經存在,但SQL Server 2012中只允許建立非聚集列索引,這意味著列索引是在原有的行存儲索引之上的引用了底層的數據,因此會消耗更多的存儲空間,但2012中的限制最大的還是一旦將非聚集列存儲索引建立在某個表上時,該表將變為只讀,這使得即使在數據倉庫中使用列索引,每次更新數據都變成非常痛苦的事。SQL Server 2014中的可更新聚集列索引則解決了該問題。

可更新聚集列存儲索引?

聚集列存儲索引的概念可以類比于傳統的行存儲,聚集索引既是數據本身,列存儲的概念也是同樣。將數據按照列存儲而不是行存儲則提供了諸多好處,

首先對于大量聚合、掃描、分組等數據倉庫類查詢僅僅需要讀取選擇的列,對于需要Join多個表的星型結構等場景性能提升尤其明顯 其次是列索引可以更新,并且每個表中只需要一個(這是優點也是缺點,因為無法再建非聚集索引)聚集列索引即可,大大節省了空間 列索引由于是按列存儲,同一列中數據類型是一樣的,因此可以更加容易的實現更高的壓縮比率 列存儲的表會占用更少的存儲空間,因此存在更少的IO

那么列存儲索引有什么弊端呢?

行存儲對于OLTP操作十分適合,因為每個聚集索引鍵可以標識某一行,該行存儲在物理磁盤上也連續,因此可以利用Seek操作完成大量選擇性非常高的查詢,而列存儲索引同一行的每一列并不在物理上聯系,并且列存儲聚集索引中并沒有“主鍵”的概念,因此并不存在SEEK操作,如果大量OLTP類的查詢,性能將會出現問題。

列存儲索引只支持Scan操作,如圖1所示。

揭秘SQL Server 2014有哪些新特性(3)-可更新列存儲聚集索引

圖1.列存儲索引只支持Scan操作

那么列索引是如何存儲呢?

列索引存儲可以望文生義,就是按列存儲。這個過程可以分為3個階段,首先將一堆行分組,這就是所謂的“行組”,分組完成后,再按列切分,最后將列壓縮,如圖2所示。

揭秘SQL Server 2014有哪些新特性(3)-可更新列存儲聚集索引

圖2.列存儲的過程

我們注意到其中有一部分不夠分組的,那么就直接讓這部分數據以傳統行存儲的形式老實呆著吧,這就是所謂的Deltastore,等數據增長到可以分組時再進行分組,目前SQL Server 2014認為10W以下的數據都不夠分組。

上述列存儲的兩部分我們可以通過2014新引入的DMV進行觀測,如圖3所示。在圖3中,我們隊目前已經存在31465行的聚集列索引插入了1000行新的數據,則SQL Server認為這部分數據不滿10W行,因此以Deltastore的方式存在。

揭秘SQL Server 2014有哪些新特性(3)-可更新列存儲聚集索引

圖3.壓縮后的列和Deltastore

當我們再插入1000數據時,可以觀察到DeltaStore中的數據又增加了1000,達到2000,但依然存在DeltaStore中。如圖4所示。

揭秘SQL Server 2014有哪些新特性(3)-可更新列存儲聚集索引

圖4.再次插入的數據依然在DeltaStore中

那么我插入大量的行進行觀測,會發現,大批量的數據依然以DeltaStore的方式存儲,如圖5。

揭秘SQL Server 2014有哪些新特性(3)-可更新列存儲聚集索引

圖5.插入大量數據后也無法將數據壓縮

那么究竟何時會壓縮這些數據呢,根據BOL的說法:http://msdn.microsoft.com/en-us/library/dn223749(v=sql.120).aspx,會有一個后臺的線程定期檢測,此外當重建或整理索引時也可以自動歸檔,如圖6所示。

揭秘SQL Server 2014有哪些新特性(3)-可更新列存儲聚集索引

圖6.重建索引后歸檔列存儲索引

空間占用比較

可更新列存儲聚集索引的壓縮比率是最高的,因為同一列往往是同一類數據,因此這類數據有更好的壓縮比。現在我純粹的從傳統聚集索引、頁壓縮、行壓縮、列存儲索引所占用的空間進行比較,當然,如果我們把傳統表的非聚集索引算上,那么行存儲表將會需要更多的空間。我們用3W多條數據進行簡單比對,如圖7所示。

揭秘SQL Server 2014有哪些新特性(3)-可更新列存儲聚集索引

圖7.不同存儲占用空間

圖7的示例數據很少,但依然可以看到,列存儲比即使沒有非聚集索引的行存儲,占用空間也幾乎少了2/3,提升不可謂不巨大。

性能簡單比較

首先,先按照列存儲,我們選擇所有的列,對于行存儲來說需要選擇整個表才能把一列數據全部讀取出來,但列存儲則只需要讀取被選擇的列,因此如果只選擇特定的列的話,列存儲性能提升巨大,如圖8所示。

揭秘SQL Server 2014有哪些新特性(3)-可更新列存儲聚集索引

圖8.可更新列存儲聚集索引性能提升巨大

但反之,我們嘗試一個典型的OLTP操作,只選擇一行的所有列,則會和圖8的結果大相庭徑了。如圖9所示。

揭秘SQL Server 2014有哪些新特性(3)-可更新列存儲聚集索引

圖9.對于OLTP操作來說,列存儲索引非常乏力

小結

本文闡述了SQL Server 2014中可更新列存儲索引的原理,概念,適用場景、空間使用情況,并舉出兩個OLAP和OLTP極端的例子進行性能比對。列存儲索引對于數據倉庫和類OLAP查詢來說是一個巨大的飛躍。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产在线精品亚洲第一区香蕉 | bt7086新片速递亚洲最新合集 | 男人猛戳女人下部30分钟 | 欧美式禁忌 | 成人丁香婷婷 | 熟睡中的麻麻大白屁股小说 | 日韩大片免费观看 | 91亚洲精品丁香在线观看 | 亚洲成人77777 | 欧美日韩一区二区三区韩大 | 国产精品青青青高清在线密亚 | 欧美三级不卡视频 | 日本中文字幕在线观看视频 | 日韩大片在线 | 手机av影院| 扒开胸流出吃奶 | 羞羞私人影院可以直接免费观影吗 | 草草线在成年免费视频网站 | 国产精品青青在线观看香蕉 | 亚洲欧美在线免费观看 | 免费毛片在线观看 | 无限资源在线观看播放 | 国产99热99 | 免费观看大片毛片 | 国产精品第1页在线播放 | 91国内精品久久久久怡红院 | 亚洲国产美女精品久久久久 | 脱jk裙的美女露小内内无遮挡 | 楚乔传第二部免费播放电视连续剧 | 国产精品猎奇系列在线观看 | 免费二区 | 免费的网址 | 1717she精品视频在线观看 | 日韩福利网站 | 欧美破苞合集 magnet | 色噜噜狠狠狠综合曰曰曰88av | 亚洲免费黄色网 | 亚洲天堂男人天堂 | 日本亚洲欧洲高清有码在线播放 | 清清草在线视频 | 国内精品久久久久影院男同志 |