說說SQL SERVER的xml索引

2021-09-08 15:41:17 字數 2235 閱讀 6057

這個我主要是對它的三種輔助索引有點迷惑,不過仔細地讀了幾遍sql聯機叢書之後,我基本上明白了吧!在這裡做個簡單的記述,如果以後還暈的時候,看看就應該能明白過來了。

sql server的xml索引分為四種,主索引,還有三種輔助索引,path index, value index, property index。

先說下主索引,用句聯機叢書上的話來說:主 xml 索引是xml資料型別列中的 xml blob 的已拆分和持久的表示形式。之所以有了主索引以後會提高查詢速度,我的理解是,是因為它已經對儲存的xml blob進行了事先的拆分並存在了索引中,這樣在查詢的時候就不需要再為拆分blob進行消耗,但是它又不能提供最優的查詢效能是因為它是按照xml原文件的節點順序進行查詢的,並不是按照需要查詢值的乙個順序來找的。關於更多關於主索引的具體描述參看sql聯機叢書的「主 xml 索引 」吧:ms-help:

或英文的msdn**:primary xml index

接下來說說三種輔助索引:

path index它是以節點(元素和屬性)的路徑和其值為鍵值的索引,所以它適合確切路徑已知,或確切路徑和其節點值已經知的查詢,如(以下的例子都**聯機叢書): 或

with xmlnamespaces ('' as "pd")

select catalogdescription.query('

/pd:productdescription/pd:summary

') as result

from production.productmodel

where catalogdescription.exist ('/pd:productdescription/@productmodelid[.="19"]') = 1

value index,這個跟path index正相反,它是以節點值 節點路徑(注意跟path index的順序是相反的)為鍵值的索引,所以它適合進行知道確切值但路徑模糊的情況,比如路徑中有萬用字元等等:

with xmlnamespaces (

'' as ci,

'' as act)

select contactid

from person.contact

where additionalcontactinfo.exist('//act:telephonenumber/act:number[.="111-111-1111"]') = 1

最後就是property index,這個是讓我最感到有些迷惑的,先開始看的書上我覺得就沒講明白,後來看了好幾遍sql聯機叢書,才理解過來。這個猛一看跟path index差不多,但它們兩者不一樣的地方在於,property index 基於主表的主鍵,節點的路徑和節點值來建立的,它多了乙個主表的主鍵值,path index是不含有主表的主鍵的,所以它的首要排序是主表主鍵,而path index則是純粹以路徑為首要排序,根本沒有主鍵的事,所以path index適合來搜尋路徑,而關於property index並不適合像path index那樣來搜尋路徑,因為這個索引是根據主表主鍵先進行了聚合或者說它是先按著主表主鍵的順序來排的,所以 sql 聯機叢書才這樣寫:

從單個 xml 例項檢索乙個或多個值的查詢適用 property 索引。當使用xml型別的value()方法檢索物件屬性並且知道物件的主鍵值時,會發生這種情況。

注意並且知道對像的主鍵值這幾個字。反正我是這樣理解的。具體的例子如:

with xmlnamespaces ('' as "pd")

select catalogdescription.value('(/pd:productdescription/@productmodelid)[1]', 'int') as modelid,

catalogdescription.value('(/pd:productdescription/@productmodelname)[1]', 'varchar(30)') as modelname

from production.productmodel

where productmodelid = 19

關於輔助索引具體的可以參見sql聯機叢書:ms-help: /s10de_1devconc/html/a90ee318-231e-4ca6-be4e-dc73c80386ba.htm或英文的msdn:secondary xml indexes

最後再轉兩句sql聯機叢書關於xml索引使用原則的話:

大概就是這些了,其他的看sql聯機叢書吧

SQL Server和XML的整合

xml相比html給予了web開發人員更大的程式設計靈活性。這種技術驅動開發機構嘗試把xml同自己的產品整合起來。微軟就是採取如此舉措的先驅者。微軟的幾乎所有產品中都能看到xml的身影。舉個例子 微軟是如何在其sql server產品線中整合xml的呢?下面咱們就來看看關鍵的for xml子句。以x...

SQL Server和XML的整合

xml相比html給予了web開發人員更大的程式設計靈活性。這種技術驅動開發機構嘗試把xml同自己的產品整合起來。微軟就是採取如此舉措的先驅者。微軟的幾乎所有產品中都能看到xml的身影。舉個例子 微軟是如何在其sql server產品線中整合xml的呢?下面咱們就來看看關鍵的for xml子句。以x...

SQL SERVER中XML命名空間

有xml如下 create table a params xml insert into a params values 202014111101 013920130005 name0005 0prod.1000000100088400 msgbody節點聲名了命名空間,用平常的查詢語句是查不到資料...