SQLServer之建立輔助XML索引
建立輔助XML索引
使用 CREATE INDEX (Transact-SQL)Transact-SQL DDL 語句可建立輔助 XML 索引並且可指定所需的輔助 XML 索引的型別。
建立輔助 XML 索引時注意下列事項:
-
除了 IGNORE_DUP_KEY 和 ONLINE 之外,允許對輔助 XML 索引使用所有適用於非聚集索引的索引選項。 對於輔助 XML 索引,這兩個選項必須始終設定為 OFF。
-
輔助索引的分割槽方式類似於主 XML 索引。
-
DROP_EXISTING 可以刪除使用者表的輔助索引併為使用者表建立其他輔助索引。
可以查詢 sys.xml_indexes 目錄檢視來檢索 XML 索引資訊。 請注意, sys.xml_indexes 目錄檢視中的 secondary_type_desc 列中提供了輔助索引的型別:secondary_type_desc 列中返回的值可以是 NULL、PATH、VALUE 或 PROPERTY。 對於主 XML 索引而言,返回的值為 NULL。
使用SSMS資料庫管理工具建立輔助XML索引
使用表設計器建立輔助XML索引
1、連線資料庫,選擇資料庫,選擇資料表-》右鍵點選表-》選擇設計。
2、在表設計器視窗-》選擇要新增輔助XML索引的資料列-》右鍵點選-》選擇XML索引。
3、在XML索引彈出框-》點選新增,新增索引-》在常規視窗選擇次要型別-》選擇值則建立XML值輔助索引,選擇屬性則建立XML屬性輔助索引,選擇路徑則建立XML路徑輔助索引。
4、在XML索引彈出框-》輸入對應的輔助索引名稱-》輸入對應的輔助索引描述-》表設計部分規則可以選擇系統預設也可以自己設定-》點選關閉。
5、點選儲存或者使用快捷鍵ctrl+s-》關閉表設計器-》重新整理表-》檢視結果。
使用物件資源管理器建立輔助XML索引
1、連線資料庫,選擇資料庫,選擇資料表-》展開資料表-》右鍵點選索引-》選擇新建索引-》選擇輔助XML索引。
2、在新建索引彈出框-》輸入輔助索引名稱-》選擇主XML索引-》選擇輔助XML索引型別。
3、在新建索引彈出框-》點選選項修改索引屬性-》索引屬性可以自己設定也可以選擇系統預設。
4、在新建索引彈出框-》點選擴充套件屬性-》輸入輔助XML索引描述名稱和值-》點選確定。
5、不用重新整理-》點選展開索引檢視建立結果。
使用T-SQL指令碼建立輔助XML索引
語法:
--宣告資料庫引用 use 資料庫名; go
--判斷是否存在輔助索引 if exists(select * from sys.indexes where name=輔助索引名稱) drop index 輔助索引名稱 on 表名 with(online=off); go
--建立路徑、值、屬性輔助索引 create xml --宣告為XML索引 index --宣告建立索引 索引名稱--宣告建立索引名稱 on 表名--宣告索引建在哪個表 (列名) --宣告索引建在哪個資料列 using xml index 主索引名稱 --宣告主索引 for { property | path | value } --宣告輔助索引型別 with(
--pad_index:指定索引填充 --pad_index=on:FILLFACTOR 指定的可用空間百分比應用於索引的中間級頁。 --pad_index=off或未指定 fillfactor:考慮到中間級頁上的鍵集,可以將中間級頁幾乎填滿,但至少要為最大索引行留出足夠空間。 pad_index={ on | off },
--fillfactor=n:指定一個百分比,指示在資料庫引擎建立或修改索引的過程中,應將每個索引頁面的葉級填充到什麼程度。 指定的值必須是 1 到 100 之間的整數。 預設值為 0。 fillfactor=n,
--statistics_norecompute:指定是否重新計算統計資訊。 --statistics_norecompute=on:過時的統計資訊不會自動重新計算。 --statistics_norecompute=off:啟用自動統計資訊更新。 statistics_norecompute={ on | off },
--sort_in_tempdb:指定是否將排序結果儲存在 tempdb 中。 --sort_in_tempdb=on:在tempdb中儲存用於生成索引的中間排序結果。如果tempdb與使用者資料庫不在同一組磁碟上,就可縮短建立索引所需的時間。但是,這會增加索引生成期間所使用的磁碟空間量。 --sort_in_tempdb=off:中間排序結果與索引儲存在同一資料庫中。 sort_in_tempdb={ on | off },
--drop_existing:表示如果這個索引還在表上就 drop 掉然後在 create 一個新的。 預設為 OFF。 --drop_existing=on:指定要刪除並重新生成現有索引,其必須具有相同名稱作為引數 index_name。 --drop_existing=off:指定不刪除和重新生成現有的索引。 如果指定的索引名稱已經存在,SQL Server 將顯示一個錯誤。 drop_existing={ on | off },
--online:指定在索引操作期間基礎表和關聯的索引是否可用於查詢和資料修改操作。 預設為 OFF。 REBUILD 可作為 ONLINE 操作執行。 --online=on:在索引操作期間不持有長期表鎖。 在索引操作的主要階段,源表上只使用意向共享 (IS) 鎖。 --這使得能夠繼續對基礎表和索引進行查詢或更新。 --操作開始時,在很短的時間內對源物件持有共享 (S) 鎖。 --操作結束時,如果建立非聚集索引,將在短期內獲取對源的 S(共享)鎖; --當聯機建立或刪除聚集索引時,以及重新生成聚集或非聚集索引時,將在短期內獲取 SCH-M(架構修改)鎖。 但聯機索引鎖是短的元資料鎖,特別是 Sch-M 鎖必須等待此表上的所有阻塞事務完成。 --在等待期間,Sch-M 鎖在訪問同一表時阻止在此鎖後等待的所有其他事務。 對本地臨時表建立索引時,ONLINE 不能設定為 ON。 --online=off:在索引操作期間應用表鎖。這樣可以防止所有使用者在操作期間訪問基礎表。 --建立、重新生成或刪除聚集索引或者重新生成或刪除非聚集索引的離線索引操作將對錶獲取架構修改 (Sch-M) 鎖。 --這樣可以防止所有使用者在操作期間訪問基礎表。 建立非聚集索引的離線索引操作將對錶獲取共享 (S) 鎖。 這樣可以防止更新基礎表,但允許讀操作(如 SELECT 語句)。 online={ on | off },
--aloow_row_locks:指定是否允許行鎖。 --allow_row_locks=on:訪問索引時允許行鎖。資料庫引擎確定何時使用行鎖。 --allow_row_locks=off:不使用行鎖。 allow_row_locks={ on | off },
--allow_page_locks:指定是否允許使用頁鎖。 --allow_page_locks=on:訪問索引時允許頁鎖。資料庫引擎確定何時使用頁鎖。 -- allow_page_locks=off:不使用頁鎖。 allow_page_locks={ on | off },
--maxdop=max_degree_of_parallelism:在索引操作期間替代 max degree of parallelism 配置選項。 有關詳細資訊,請參閱 配置 max degree of parallelism 伺服器配置選項。 使用 MAXDOP 可以限制在執行並行計劃的過程中使用的處理器數量。 最大數量為 64 個處理器。 --max_degree_of_parallelism 可以是: --1 - 取消生成並行計劃。 -->1 - 將並行索引操作中使用的最大處理器數量限制為指定數量。 --0(預設值)- 根據當前系統工作負荷使用實際數量的處理器或更少數量的處理器。 --有關詳細資訊,請參閱 配置並行索引操作。 maxdop=max_degree_of_parallelism
) go
--宣告輔助索引描述 execute sys.sp_addextendedproperty N'MS_Description',N'索引描述',N'schema',N'dbo',N'table',N'表名',N'index',N'索引名'; go
示例:
--宣告資料庫引用 use testss; go
--判斷是否存在輔助索引 if exists(select * from sys.indexes where name='propertyxmlindex') drop index propertyxmlindex on test1 with(online=off); go
--建立路徑、值、屬性輔助索引 create xml --宣告為XML索引 index --宣告建立索引 propertyxmlindex --宣告建立索引名稱 on test1 --宣告索引建在哪個表 (xml1) --宣告索引建在哪個資料列 using xml index xmlindex --宣告主索引 for property --宣告輔助索引型別 with(
--pad_index:指定索引填充 --pad_index=on:FILLFACTOR 指定的可用空間百分比應用於索引的中間級頁。 --pad_index=off或未指定 fillfactor:考慮到中間級頁上的鍵集,可以將中間級頁幾乎填滿,但至少要為最大索引行留出足夠空間。 pad_index=on,
--fillfactor=n:指定一個百分比,指示在資料庫引擎建立或修改索引的過程中,應將每個索引頁面的葉級填充到什麼程度。 指定的值必須是 1 到 100 之間的整數。 預設值為 0。 fillfactor=2,
--statistics_norecompute:指定是否重新計算統計資訊。 --statistics_norecompute=on:過時的統計資訊不會自動重新計算。 --statistics_norecompute=off:啟用自動統計資訊更新。 statistics_norecompute=off,
--sort_in_tempdb:指定是否將排序結果儲存在 tempdb 中。 --sort_in_tempdb=on:在tempdb中儲存用於生成索引的中間排序結果。如果tempdb與使用者資料庫不在同一組磁碟上,就可縮短建立索引所需的時間。但是,這會增加索引生成期間所使用的磁碟空間量。 --sort_in_tempdb=off:中間排序結果與索引儲存在同一資料庫中。 sort_in_tempdb=on,
--drop_existing:表示如果這個索引還在表上就 drop 掉然後在 create 一個新的。 預設為 OFF。 --drop_existing=on:指定要刪除並重新生成現有索引,其必須具有相同名稱作為引數 index_name。 --drop_existing=off:指定不刪除和重新生成現有的索引。 如果指定的索引名稱已經存在,SQL Server 將顯示一個錯誤。 drop_existing=off,
--online:指定在索引操作期間基礎表和關聯的索引是否可用於查詢和資料修改操作。 預設為 OFF。 REBUILD 可作為 ONLINE 操作執行。 --online=on:在索引操作期間不持有長期表鎖。 在索引操作的主要階段,源表上只使用意向共享 (IS) 鎖。 --這使得能夠繼續對基礎表和索引進行查詢或更新。 --操作開始時,在很短的時間內對源物件持有共享 (S) 鎖。 --操作結束時,如果建立非聚集索引,將在短期內獲取對源的 S(共享)鎖; --當聯機建立或刪除聚集索引時,以及重新生成聚集或非聚集索引時,將在短期內獲取 SCH-M(架構修改)鎖。 但聯機索引鎖是短的元資料鎖,特別是 Sch-M 鎖必須等待此表上的所有阻塞事務完成。 --在等待期間,Sch-M 鎖在訪問同一表時阻止在此鎖後等待的所有其他事務。 對本地臨時表建立索引時,ONLINE 不能設定為 ON。 --online=off:在索引操作期間應用表鎖。這樣可以防止所有使用者在操作期間訪問基礎表。 --建立、重新生成或刪除聚集索引或者重新生成或刪除非聚集索引的離線索引操作將對錶獲取架構修改 (Sch-M) 鎖。 --這樣可以防止所有使用者在操作期間訪問基礎表。 建立非聚集索引的離線索引操作將對錶獲取共享 (S) 鎖。 這樣可以防止更新基礎表,但允許讀操作(如 SELECT 語句)。 online=off,
--aloow_row_locks:指定是否允許行鎖。 --allow_row_locks=on:訪問索引時允許行鎖。資料庫引擎確定何時使用行鎖。 --allow_row_locks=off:不使用行鎖。 allow_row_locks=on,
--allow_page_locks:指定是否允許使用頁鎖。 --allow_page_locks=on:訪問索引時允許頁鎖。資料庫引擎確定何時使用頁鎖。 -- allow_page_locks=off:不使用頁鎖。 allow_page_locks=on,
--maxdop=max_degree_of_parallelism:在索引操作期間替代 max degree of parallelism 配置選項。 有關詳細資訊,請參閱 配置 max degree of parallelism 伺服器配置選項。 使用 MAXDOP 可以限制在執行並行計劃的過程中使用的處理器數量。 最大數量為 64 個處理器。 --max_degree_of_parallelism 可以是: --1 - 取消生成並行計劃。 -->1 - 將並行索引操作中使用的最大處理器數量限制為指定數量。 --0(預設值)- 根據當前系統工作負荷使用實際數量的處理器或更少數量的處理器。 --有關詳細資訊,請參閱 配置並行索引操作。 maxdop=2
) go
--宣告輔助索引描述 execute sys.sp_addextendedproperty N'MS_Description',N'第一個屬性輔助XML索引',N'schema',N'dbo',N'table',N'test1',N'index',N'propertyxmlindex'; go
建立輔助XML索引優缺點
優點:
1、如果工作負荷對 XML 列大量使用路徑表示式,則 PATH 輔助 XML 索引可能會提高工作負荷的處理速度。
2、如果工作負荷通過使用路徑表示式從單個 XML 例項中檢索多個值,則在 PROPERTY 索引中聚集各個 XML 例項中的路徑可能會很有用。
3、如果工作負荷涉及查詢 XML 例項中的值,但不知道包含那些值的元素名稱或屬性名稱,則您可能希望建立 VALUE 索引。
4、XML 值相對較大,而檢索的部分相對較小。生成索引避免了在執行時分析所有資料,並能實現高效的查詢處理,從而使索引查詢受益。
5、建立輔助XML索引的前提是必須存在主XML索引,輔助XML索引用於增強搜尋的效能。
缺點:
1、資料修改過程中的 XML 索引維護開銷較大。