SQL SERVER索引最佳化系列之三:填滿因數

來源:互聯網
上載者:User

建SQL SERVER索引的時候有一個選項,即Fillfactor(填滿因數)。

這個可能很少人會去注意它,但它也是比較重要的。大家可能也都知道有這個東西,但是如何去使用它,可能會比較迷糊。另外,即使你理解了它的原理,也不一定能使用好它,這個還要具體分析索引欄位的更新頻率等等。

記得看書知道有這麼個東西,但是都是看的迷迷糊糊的,不知道幹嗎的,好象設定不設定都一樣的。其實,像索引這些東西,當資料達到幾十萬上百萬的時候,它的效果就表現的很明顯。

填滿因數定義:索引中葉級頁的資料充滿度。它的作用:當系統建立或重建索引時,在每一個索引頁上預先留出一部分空間。使得系統在新增索引資訊時能夠保持索引頁不分裂。它的目的是使索引的頁分裂最小並對效能微調。

(圖A)

看圖A,通過前面說的我們知道資料是按頁存的,根據定義,填滿因數是指圖A中的Page100(Page110,Page120,Page130)的資料的充滿度。如果按預設,填滿因數是為0(0和100%是一樣的),即完全充滿。如果設定60%,則Page100的資料只充滿空間的60%,會有40%的剩餘空間。

填滿因數只在建立索引時執行;索引建立後,當表中進行資料的添加、刪除或更新時,不會保持填滿因數。即建立索引完後添加資料,比如添加”COM”,則會添加在Page100的”CON”的前面,此時Page100的剩餘空間將小於40%。因為充滿度只有60%,所以”Barr”和”CON”之間會有空隙,所以”COM”將直接插入他們之間,不會照成資料移動和頁分裂。如果充滿度是100%即整頁充滿資料,則會照成”CON”及它後面的資料都向後移動1位,然後在”CON”前面插入”COM”,而Page100會大約一半的行(後半部)移到新頁中以便為新行騰出空間(這種重組稱為頁面分割。頁面分割會降低效能並使表中的資料存放區產生片段.),在這些移動的過程中一方面速度明顯下降,另一方面會產生片段。添加完資料後要使填滿因數繼續保持60%則需要重建索引。

有人將填滿因數比喻成下面這個例子:

為了給一個班的10個同學排一下順序,我們可以給每一位同學一個編號,如:
a. 從1,2,3,4,5,6,7,9,10。這時,我們說填滿因數是100.
此時,如果又來了新同學,而其排名要在中間某位置的話,我們就要改變許多個同學的號碼,如新同學排第5位,就需要4號以後的同學號碼都加1,再將新同學編為5號才行.
b.我們又可以給同學這樣編號:1,3,5,7,9,11,13,15,17,19
也同樣完成了順序的排列.我們說這時填滿因數是50%,此時如果來了新同學,又是排在第5位的話,那麼我們只需將其號碼編為8就行了.其它同學都不用變.

可見,填滿因數大的時候,點用的號碼空間小,耗費資源少,小的時候,佔用資源加大,但操作方便,迅速.

填滿因數大的時候,插入或修改記錄後重新索引的工作會很大,磁碟IO操作增加,效能必然降低,但其佔用空間小.填滿因數小的時候,索引檔案佔用磁碟及記憶體空間相對要大,但是,系統本身重新索引所需IO操作減少,效能提高,只是多佔用一些儲存空間. 孰輕孰重要自已決定。

通常只有當不會對資料變更時(例如,在唯讀表中)才會使設定100%。另外,只有當在表中根據現有資料建立新索引,並且可以精確預見將來會對這些資料進行哪些更改時,將填滿因數選項設定為另一個值才有用。所以填滿因數不是很容易設定的。

 

 

SQL SERVER索引最佳化系列之一:工作原理&聚簇索引|非聚簇索引

SQL SERVER索引最佳化系列之二:索引效能考慮

SQL SERVER索引最佳化系列之三:填滿因數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.