資料分割索引的特殊指導方針
雖然可以獨立從基底資料表實作資料分割索引,不過,先設計資料分割資料表之後再於此資料表上建立索引通常比較合理。當您這樣做時,SQL Server 會使用與資料表相同的資料分割結構描述和分割資料行,自動對索引進行分割。因此,索引的分割本質上和資料表的分割方法一樣。這樣會讓索引與資料表「對齊」。
如果您指定了不同的資料分割結構描述,或在建立索引時指定不同的檔案群組來放置索引,則 SQL Server 不會將索引對齊資料表。
如果您預期索引會藉由採用額外資料分割來擴充,或者索引與經常性資料分割切換相關,則將索引對齊資料分割資料表就顯得特別重要。如需詳細資訊,請參閱<設計資料分割來管理資料的子集>。資料表與其索引對齊時,SQL Server 在維護資料表及其索引的資料分割結構的同時,可快速且有效地切換資料分割。
[!附註]
索引不需要參與相同的具名資料分割函數,即可對齊其基底資料表。不過,索引和基底資料表的資料分割函數本質上必須相同,也就是說 1) 這兩種資料分割函數的引數具有相同的資料類型,2) 它們都定義相同數目的資料分割,3) 對資料分割都定義相同的界限值。
Database Engine Tuning Advisor 的 [微調選項] 索引標籤會提供 [對齊的資料分割] 設定,以指定新的建議索引將對齊其基底資料表。[保留對齊的資料分割] 設定可用於相同的目的,也可以用來卸除現有的非對齊索引。如需詳細資訊,請參閱<Database Engine Tuning Advisor (微調選項索引標籤)>。Database Engine Tuning Advisor 通常可用來針對效能建議索引,而這些索引可以是對齊和非對齊索引的混合。如需詳細資訊,請參閱<Database Engine Tuning Advisor 概觀>。
設計基底資料表的獨立式資料分割索引 (非對齊),在下列情況中將十分有用:
尚未對基底資料表進行資料分割。
索引鍵是唯一的,並且不含資料表的分割資料行。
您希望使用不同的聯結資料行,讓基底資料表參與具有多個資料表的共現聯結。
[!附註]
若要啟用資料分割切換,必須對齊資料表上的所有索引。
建立資料分割索引時,請考慮使用下列章節中的資訊。
分割唯一索引
分割唯一索引時 (叢集或非叢集),必須從在唯一索引鍵中所使用的分割資料行中,選取分割資料行。
[!附註]
這項限制會讓 SQL Server 僅調查單一資料分割,以確定資料表中沒有重複的新索引鍵值。
若分割資料行不可能加入唯一索引鍵,您必須使用 DML 觸發程序來強制唯一性。
分割叢集索引
分割叢集索引時,叢集索引鍵必須包含分割資料行。分割非唯一的叢集索引,且未在叢集索引鍵中明確指定分割資料行時,SQL Server 預設會將分割資料行加入叢集索引鍵清單中。如果叢集索引是唯一的,您必須明確指定叢集索引鍵包含分割資料行。
分割非叢集索引
分割唯一的非叢集索引時,索引鍵必須包含分割資料行。分割非唯一的非叢集索引時,SQL Server 預設會將分割資料行加入為索引的無索引鍵 (併入) 資料行,以確定索引已對齊基底資料表。如果索引中已有分割資料行,SQL Server 不會將分割資料行加入索引。
記憶體限制和資料分割索引
記憶體限制會影響效能或 SQL Server 建立資料分割索引的能力。如果資料表有適用的叢集索引,當索引沒有對齊基底資料表或沒有對齊叢集索引時,特別會發生這種狀況。
當 SQL Server 執行排序以建立資料分割索引時,會先對每個資料分割建立一個排序表。接著會在每個資料分割的個別檔案群組中建立排序表,而如果指定了 SORT_IN_TEMPDB 索引選項,則會在 tempdb, 中建立排序表。
每個排序表都需要最小量的記憶體才能建立。當您在建立對齊基底資料表的資料分割索引時,會使用少量記憶體一次建立一個排序表。不過,當您在建立非對齊資料分割索引時,則會同時建立排序表。
因此,必須有足夠的記憶體才能處理這些並行排序作業。資料分割的數量越大的話,則需要越多記憶體。對每個資料分割來說,每個排序表的大小下限為 40 個頁面,而每一頁都為 8 KB。例如,具有 100 個資料分割的非對齊資料分割索引,需要足夠的記憶體,才能同時連續排序 4,000 (40 * 100) 頁。如果有可用的記憶體,則建立作業會成功,但效能會變差。如果無法使用這個數量的記憶體,建立作業會失敗。此外,具有 100 個資料分割的對齊資料分割索引只需要足夠排序 40 頁的記憶體,因為並不會同時執行排序作業。
針對對齊和非對齊索引,如果 SQL Server 將平行處理原則的程度套用到多處理器電腦上的建立作業,記憶體需求會比較大。這是因為平行處理原則的程度越大,則記憶體需求也越大。例如,如果 SQL Server 將平行處理原則的程度設為 4,則具有 100 個資料分割的非對齊資料分割索引需要四個處理器的足夠記憶體,才能同時排序 4,000 頁或 16,000 頁。如果已對齊資料分割索引,則記憶體需求會降低為四個處理器排序 40 頁,或 160 (4 * 40) 頁。您可以使用 MAXDOP 索引選項,以手動方式降低平行處理原則的程度。如需詳細資訊,請參閱<設定平行索引作業>。
如需 SQL Server 如何在建立索引時執行排序作業的詳細資訊,請參閱<建立 tempdb 與索引>。