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 索引維護開銷較大。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的SQLServer之创建辅助XML索引的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Caffe SSD Ubuntu16 0
- 下一篇: 使用ASP.NET Core开发Grap