日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

T-SQL查询高级—SQL Server索引中的碎片和填充因子

發布時間:2025/3/19 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 T-SQL查询高级—SQL Server索引中的碎片和填充因子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??? 寫在前面:本篇文章需要你對索引和SQL中數據的存儲方式有一定了解.標題中高級兩個字僅僅是因為本篇文章需要我的T-SQL進階系列文章的一些內容作為基礎.

簡介


??? 在SQL Server中,存儲數據的最小單位是頁,每一頁所能容納的數據為8060字節.而頁的組織方式是通過B樹結構(表上沒有聚集索引則為堆結構,不在本文討論之列)如下圖:

????

??? 在聚集索引B樹中,只有葉子節點實際存儲數據,而其他根節點和中間節點僅僅用于存放查找葉子節點的數據.

??? 每一個葉子節點為一頁,每頁是不可分割的. 而SQL Server向每個頁內存儲數據的最小單位是表的行(Row).當葉子節點中新插入的行或更新的行使得葉子節點無法容納當前更新或者插入的行時,分頁就產生了.在分頁的過程中,就會產生碎片.

?

?

理解外部碎片


??? 首先,理解外部碎片的這個“外”是相對頁面來說的。外部碎片指的是由于分頁而產生的碎片.比如,我想在現有的聚集索引中插入一行,這行正好導致現有的頁空間無法滿足容納新的行。從而導致了分頁:

???

???? 因為在SQL SERVER中,新的頁是隨著數據的增長不斷產生的,而聚集索引要求行之間連續,所以很多情況下分頁后和原來的頁在磁盤上并不連續.

???? 這就是所謂的外部碎片.

???? 由于分頁會導致數據在頁之間的移動,所以如果插入更新等操作經常需要導致分頁,則會大大提升IO消耗,造成性能下降.

???? 而對于查找來說,在有特定搜索條件,比如where子句有很細的限制或者返回無序結果集時,外部碎片并不會對性能產生影響。但如果要返回掃描聚集索引而查找連續頁面時,外部碎片就會產生性能上的影響.

?

?

???? 在SQL Server中,比頁更大的單位是區(Extent).一個區可以容納8個頁.區作為磁盤分配的物理單元.所以當頁分割如果跨區后,需要多次切區。需要更多的掃描.因為讀取連續數據時會不能預讀,從而造成額外的物理讀,增加磁盤IO.

?

理解內部碎片


??? 和外部碎片一樣,內部碎片的”內”也是相對頁來說的.下面我們來看一個例子:

????

??? 我們創建一個表,這個表每個行由int(4字節),char(999字節)和varchar(0字節組成),所以每行為1003個字節,則8行占用空間1003*8=8024字節加上一些內部開銷,可以容納在一個頁面中:

????

??? 當我們隨意更新某行中的col3字段后,造成頁內無法容納下新的數據,從而造成分頁:

????

?? 分頁后的示意圖:

???

????而當分頁時如果新的頁和當前頁物理上不連續,則還會造成外部碎片

?

?

?

內部碎片和外部碎片對于查詢性能的影響


??? 外部碎片對于性能的影響上面說過,主要是在于需要進行更多的跨區掃描,從而造成更多的IO操作.

??? 而內部碎片會造成數據行分布在更多的頁中,從而加重了掃描的頁樹,也會降低查詢性能.

??? 下面通過一個例子看一下,我們人為的為剛才那個表插入一些數據造成內部碎片:

????

??? 通過查看碎片,我們發現這時碎片已經達到了一個比較高的程度:

????

?

??? 通過查看對碎片整理之前和之后的IO,我們可以看出,IO大大下降了:

????

?

對于碎片的解決辦法


??? 基本上所有解決辦法都是基于對索引的重建和整理,只是方式不同

????1.刪除索引并重建

?????? 這種方式并不好.在刪除索引期間,索引不可用.會導致阻塞發生。而對于刪除聚集索引,則會導致對應的非聚集索引重建兩次(刪除時重建,建立時再重建).雖然這種方法并不好,但是對于索引的整理最為有效

??? 2.使用DROP_EXISTING語句重建索引

?????? 為了避免重建兩次索引,使用DROP_EXISTING語句重建索引,因為這個語句是原子性的,不會導致非聚集索引重建兩次,但同樣的,這種方式也會造成阻塞

??? 3.如前面文章所示,使用ALTER INDEX REBUILD語句重建索引

?????? 使用這個語句同樣也是重建索引,但是通過動態重建索引而不需要卸載并重建索引.是優于前兩種方法的,但依舊會造成阻塞。可以通過ONLINE關鍵字減少鎖,但會造成重建時間加長.

??? 4.使用ALTER INDEX REORGANIZE

???????這種方式不會重建索引,也不會生成新的頁,僅僅是整理,當遇到加鎖的頁時跳過,所以不會造成阻塞。但同時,整理效果會差于前三種.

?

理解填充因子


????? 重建索引固然可以解決碎片的問題.但是重建索引的代價不僅僅是麻煩,還會造成阻塞。影響使用.而對于數據比較少的情況下,重建索引代價并不大。而當索引本身超過百兆的時候。重建索引的時間將會很讓人蛋疼.

????? 填充因子的作用正是如此。對于默認值來說,填充因子為0(0和100表示的是一個概念),則表示頁面可以100%使用。所以會遇到前面update或insert時,空間不足導致分頁.通過設置填充因子,可以設置頁面的使用程度:

?????

????? 下面來看一個例子:

????? 還是上面那個表.我插入31條數據,則占4頁:

??????

?

???? 通過設置填充因子,頁被設置到了5頁上:

?????

???? 這時我再插入一頁,不會造成分頁:

?????

???? 上面的概念可以如下圖來解釋:

?????

?

?

????? 可以看出,使用填充因子會減少更新或者插入時的分頁次數,但由于需要更多的頁,則會對應的損失查找性能.

?????

如何設置填充因子的值


??? 如何設置填充因子的值并沒有一個公式或者理念可以準確的設置。使用填充因子雖然可以減少更新或者插入時的分頁,但同時因為需要更多的頁,所以降低了查詢的性能和占用更多的磁盤空間.如何設置這個值進行trade-off需要根據具體的情況來看.

??? 具體情況要根據對于表的讀寫比例來看,我這里給出我認為比較合適的值:

??? 1.當讀寫比例大于100:1時,不要設置填充因子,100%填充

??? 2.當寫的次數大于讀的次數時,設置50%-70%填充

??? 3.當讀寫比例位于兩者之間時80%-90%填充

??? 上面的數據僅僅是我的看法,具體設置的數據還要根據具體情況進行測試才能找到最優.

?

總結


???? 本文講述了SQL SERVER中碎片產生的原理,內部碎片和外部碎片的概念。以及解決碎片的辦法和填充因子.在數據庫中,往往每一個對于某一方面性能增加的功能也會伴隨著另一方面性能的減弱。系統的學習數據庫知識,從而根據具體情況進行權衡,是dba和開發人員的必修課.

總結

以上是生活随笔為你收集整理的T-SQL查询高级—SQL Server索引中的碎片和填充因子的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www.av网 | 久久精精品久久久久噜噜 | 久艹伊人 | 亚州福利 | 欧美熟妇精品一区二区蜜桃视频 | 日本www在线播放 | 欧美影院在线观看 | 波多野吉衣中文字幕 | 一区二区三区四区视频在线观看 | 人人干在线 | 麻豆av一区 | 99热免费观看 | 情侣自拍av | 亚洲黄色在线看 | 国产日韩欧美视频在线 | yes4444视频在线观看 | 污污视频网站在线 | 国产福利小视频在线 | 蜜桃91精品入口 | 草草影院国产 | 亚洲人 女学生 打屁股 得到 | 日韩欧美福利 | 日本免费一级片 | 国产男同gay网站 | 亚洲综合p| 激情网av| 在线看中文字幕 | 欧洲亚洲国产精品 | 人人干超碰 | 午夜成人影片 | 毛片专区 | 婷婷资源网 | 91成人综合| 久久七| 男女啊啊啊视频 | 欧美日韩三 | 亚洲国产精品成人综合在线 | 91视频国产免费 | av综合一区 | 成人午夜淫片免费观看 | 日韩一区二区三区在线视频 | 免费观看全黄做爰的视频 | 五月天久久久久 | 亚洲人免费视频 | 国产免费无码一区二区 | 美女尿尿网站 | 欧美日韩亚洲国产综合 | 国产大屁股喷水视频在线观看 | 久久99精品久久久久久琪琪 | 亚洲国产成人va在线观看天堂 | 日本不卡高清视频 | 亚洲综合精品国产 | 欧美夜夜操 | 可以免费在线观看的av | 日韩精品电影一区二区 | 日韩精品电影网 | 欧美福利一区二区三区 | 久久久91 | 国产午夜无码视频在线观看 | 4438五月天 | 又污又黄的网站 | 新香蕉视频 | 啪啪短视频 | 黄网站在线播放 | 久久久久久久久久久久 | 黄色片成年人 | 四虎影视免费在线观看 | 国产三级国产精品 | 一道本不卡视频 | 丰满少妇毛片 | 国产aⅴ精品一区二区三区久久 | 日韩精品久久久久久 | 午夜福利视频合集1000 | 人妻一区二区在线 | 黄网在线观看视频 | 成人性生交大片免费 | 男人操女人下面视频 | 五月天丁香网 | 老头av| 在线三区 | av老司机久久 | 欧美日韩99 | 高hhhhh| 91免费看黄 | 九九久久久| 午夜三级在线观看 | 中文人妻熟女乱又乱精品 | 亚洲精品国产美女 | 深夜福利视频导航 | 在线a天堂| 国产乱码一区二区三区播放 | av久色 | 69国产在线| 色偷偷综合网 | 日日夜夜狠狠操 | 青青草在线视频免费观看 | 精品日韩在线视频 | av激情久久 | 免费欧美一区 |