非聚集索引及其效能優化

2022-03-07 04:05:21 字數 1911 閱讀 3914

建立在主鍵之上:

create nonclustered index [ix_#test] on #test

(testnumber asc

)with (fillfactor=90) on [primary]

非主鍵之上:

create nonclustered index [ix_#test] on #test

(testnumber asc

)with (fillfactor=90) 

fill factor:

使用 fill factor 選項可以指定 microsoft sql server 2005 使用現有資料建立新索引時將每頁填滿到什麼程度。由於在頁填充時 sql server 必須花時間來拆分頁,因此填充因子會影響效能。

僅在建立或重新生成索引時使用填充因子。頁面不會維護在任何特定的填充水平上。

fill factor 的預設值為 0;其有效值的範圍為從 0 到 100。當 fillfactor 設定為 0 或 100 時,將完全填充葉級別。很少需要更改 fill factor 的預設值,因為可以使用 create index 或 alter index rebuild 語句來覆蓋其對於指定索引的值。

填充因子:

提供填充因子選項是為了優化索引資料儲存和效能。當建立或重新生成索引時,填充因子值可確定每個葉級頁上要填充資料的空間百分比,以便保留一定百分比的可用空間供以後擴充套件索引。例如,指定填充因子的值為 80 表示每個葉級頁上將有 20% 的空間保留為空,以便隨著在基礎表中新增資料而為擴充套件索引提供空間。在每頁上的索引行之間(而不是頁的末尾)保留空白區域。

填充因子值是 1 到 100 之間的乙個百分比。在大多數情況下,伺服器範圍的預設值 0 是最佳選項。如果將填充因子設定為 0,則將完全填充葉級別。

注意:填充因子值 0 和 100 意義相同。

可以使用 create index 或 alter index 語句來設定各個索引的填充因子值。若要修改伺服器範圍的預設值,請使用 sp_configure 系統儲存過程。若要檢視乙個或多個索引的填充因子值,請使用 sys.indexes 目錄檢視。

只有在建立或重新生成了索引後,才會應用填充因子。sql server 2005 資料庫引擎並不會在頁中動態保持指定的可用空間百分比。如果試圖在資料頁上保持額外的空間,將有背於使用填充因子的本意,因為隨著資料的輸入,資料庫引擎將不得不在每個頁上進行頁拆分,以保持填充因子所指定的可用空間百分比。

頁拆分:

正確選擇填充因子值可提供足夠的空間以便隨著向基礎表中新增資料而擴充套件索引,從而減少頁拆分可能性。

如果向已滿的索引頁新增新行,資料庫引擎將把大約一半的行移到新頁中,以便為該新行騰出空間。這種重組稱為頁拆分。頁拆分可為新記錄騰出空間,但是執行頁拆分可能需要花費一定的時間,此操作會消耗大量資源。此外,它還可能造成碎片,從而導致 i/o 操作增加。如果經常發生頁拆分,可通過使用新的或現有的填充因子值來重新生成索引,從而重新分發資料。

儘管採用較低的填充因子值(非 0)可減少隨著索引增長而拆分頁的需求,但是索引將需要更多的儲存空間,並且會降低讀取效能。即使對於面向許多插入和更新操作的應用程式,資料庫讀取次數一般也超過資料庫寫入次數的 5 到 10 倍。因此,指定乙個不同於預設值的填充因子會降低資料庫的讀取效能,而降低量與填充因子設定的值成反比。例如,當填充因子的值為 50 時,資料庫的讀取效能會降低兩倍。讀取效能降低是因為索引包含較多的頁,因此增加了檢索資料所需的磁碟 i/o 操作。

如果新資料在整個表中平均分布,則非零填充因子有助於提高效能。不過,如果所有資料都新增到表末尾,將填充空白區域。例如,如果索引鍵列為 identity 列,則新行的鍵會一直增加,行會按邏輯新增到表末尾。這種情況下,頁拆分不會導致效能下降。應使用預設填充因子 0,或指定填充因子 100 以便填充葉級。

聚集索引 非聚集索引

通常情況下,建立索引是加快查詢速度的有效手段。但索引不是萬能的,靠索引並不能實現對所有資料的快速訪問。事實上,如果索引策略和資料檢索需求嚴重不符的話,建立索引反而會降低查詢效能。因此在實際使用當中,應該充分考慮到索引的開銷,包括磁碟空間的開銷及處理開銷 如資源競爭和加鎖 例如,如果資料頻繁的更新或刪...

聚集索引和非聚集索引

聚集索引和非聚集索引 一 聚集索引和非聚集索引 聚集索引和非聚集索引的根本區別是表記錄的排列順序和與索引的排列順序是否一致,聚集索引表記錄的排列順序與索引的排列順序一致,優點是查詢速度快,因為一旦具有第乙個索引值的紀錄被找到,具有連續索引值的記錄也一定物理的緊跟其後。聚集索引的缺點是對錶進行修改速度...

聚集索引和非聚集索引

本文引自 一種索引,該索引中鍵值的邏輯順序決定了表中相應行的物理順序。聚集索引確定表中資料的物理順序。聚集索引類似於 簿,後者按姓氏排列資料。由於聚集索引規定資料在表中的物理儲存順序,因此乙個表只能包含乙個聚集索引。但該索引可以包含多個列 組合索引 就像 簿按姓氏和名字進行組織一樣。聚集索引對於那些...