數據庫的索引和填充因子fillfactor


索引分為聚簇索引和非聚簇索引

1.聚簇索引/聚集索引

 聚簇索引的順序就是數據的物理存儲順序,對於一個表來說,只有一個聚簇索引

create unique clustered index id_index

on table_1(id asc)

with 

fillfactor=10 /*填充因子10%*/

 

2.非聚簇索引/非聚集索引

聚簇索引的順序跟數據的物理順序無關,索引與數據存放在不同的物理區域,建立非聚簇索引時數據本身不進行排序,一個表中可含多個非聚簇索引。

create nonclustered  index id_datetimes_index

on table_1(id asc,datetimes asc)

with 

fillfactor=10 /*填充因子10%*/

 

3.填充因子fillfactor

  在創建聚集索引時,表中的數據按照索引列中的值的順序存儲在數據庫的數據頁中。在表中插入新的數據行或更改索引列中的值 時,可能必須重新組織表中的數據存儲,以便為新行騰出空間,保持數據的有序存儲。這同樣適用於非聚集索引。添加或更改數據時,SQL   Server   可能不得不重新組織非聚集索引頁中的數據存儲。向一個已滿的索引頁添加某個新行時,SQL   Server   把大約一半的行移到新頁中以便為新行騰出空間。這種重組稱為頁拆分。頁拆分會降低性能並使表中的數據存儲產生碎片。有關更多信息,請參見表和索引構架。   
   
  創建索引時,可以指定一個填充因子,以便在索引的每個葉級頁上留出額外的間隙和保留一定百分比的空間,供將來表的數據存儲容量進行擴充和減少頁拆分的可能 性。填充因子的值是從   0   到   100   的百分比數值,指定在創建索引后對數據頁的填充比例。值為   100   時表示頁將填滿,所留出的存儲空間量最小。只有當不會對數據進行更改時(例如,在只讀表中)才會使用此設置。值越小則數據頁上的空閑空間越大,這樣可以減 少在索引增長過程中對數據頁進行拆分的需要,但需要更多的存儲空間。當表中數據會發生更改時,這種設置更為適當。   
   
  提供填充因子選項是為了對性能進行微調。但是,使用   sp_configure   系統存儲過程指定的服務器范圍的默認填充因子,在大多數情況下都是最佳的選擇。     
             
  說明即使對於一個面向許多插入和更新操作的應用程序來說,數據庫讀取次數一般也超過數據庫寫入次數的   5   到   10   倍。因此,指定一個不同於默認設置的填充因子會降低數據庫的讀取性能,而降低量與填充因子設置值成反比。例如,當填充因子的值為   50%   時,數據庫的讀取性能會降低兩倍。   
       
  只有當在表中根據現有數據創建新索引,並且可以精確預見將來會對這些數據進行哪些更改時,將填充因子選項設置為另一個值才有用。   
   
  填充因子只在創建索引時執行;索引創建后,當表中進行數據的添加、刪除或更新時,不會保持填充因子。如果試圖在數據頁上保持額外的空間,則將有背於使用填 充因子的本意,因為隨着數據的輸入,SQL   Server   必須在每個頁上進行頁拆分,以保持填充因子指定的空閑空間百分比。因此,如果表中的數據進行了較大的變動,添加了新數據,可以填充數據頁的空閑空間。在這 種情況下,可以重新創建索引,重新指定填充因子,以重新分布數據。 

 

  因此,一般設置的原則是數據變化較大,填充因子設較小值,而數據變化較小,填充因子設較大值。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM