索引定义的限制性 - IBM
文章推薦指數: 80 %
要兼容, XML 数据索引 需要将员工工资属性节点包括在已建立索引的节点中,并将值存储为DOUBLE 或DECIMAL 类型。
查询可以对XML 数据使用下列其中一个索引,例如: CREATE ...
索引定义的限制性
对查询求值是否可以使用索引通常取决于对索引定义与查询进行比较的限制性程度。
以下示例显示了可以一起使用的一些查询和索引。
具有范围谓词的查询的索引
以下查询从具有XML列公司的表公司信息公司中检索工资大于35000的员工的公司信息:SELECTcompanydocsFROMcompanyinfo
WHEREXMLEXISTS('$x/company/emp[@salary>35000]'
PASSINGcompanydocsAS"x")要兼容,XML数据索引需要将员工工资属性节点包括在已建立索引的节点中,并将值存储为DOUBLE或DECIMAL类型。
查询可以对XML数据使用下列其中一个索引,例如:
CREATEINDEXempindexoncompanyinfo(companydocs)
GENERATEKEYUSINGXMLPATTERN'//@salary'ASSQLDECIMAL(10,2)
CREATEINDEXempindexoncompanyinfo(companydocs)
GENERATEKEYUSINGXMLPATTERN'/company/emp/@salary'
ASSQLDECIMAL(10,2)
可由多个查询使用的索引
以下查询检索员工标识为31664的员工的公司信息。
SELECTcompanydocsFROMcompanyinfo
WHEREXMLEXISTS('$x/company/emp[@id="31664"]'
PASSINGcompanydocsAS"x")第二个查询检索标识为K55的部门的公司信息。
SELECTcompanydocsFROMcompanyinfo
WHEREXMLEXISTS('$x/company/emp/dept[@id="K55"]
PASSINGcompanydocsAS"x")为了与两个查询兼容,XML数据索引需要在索引节点中包含员工标识属性节点和部门标识属性节点,并将索引中的值存储为VARCHAR类型。
查询可以使用此XML数据索引:
CREATEINDEXempdeptindexoncompanyinfo(companydocs)
GENERATEKEYUSINGXMLPATTERN'//@id'ASSQLVARCHAR(25)
限制XQuery谓词时包含名称空间
请使用包含客户信息的XML列和在XML列上创建的索引来考虑下表:CREATETABLEcustomer(xmlcolXML)%
CREATEUNIQUEINDEXcustomer_id_indexONcustomer(xmlcol)
GENERATEKEYUSINGXMLPATTERN
'DECLAREDEFAULTELEMENTNAMESPACE
"http://mynamespace.org/cust";/Customer/@id'
ASSQLDOUBLE%注:此部分中使用的语句终止符是百分比符号(%),因为分号(;)已用作名称空间定界符。
以下查询未能匹配索引:
SELECTxmlcolFROMcustomer
WHEREXMLEXISTS('$xmlcol/*:Customer[@id=1042]'
PASSINGxmlcolAS"xmlcol")%为了使查询能够使用索引,查询必须比索引的限制性或限制性更强。
索引customer_id_index仅涵盖一个特定名称空间(http://mynamespace.org/cust)中的客户元素。
由于在查询中使用*:来表示任何名称空间,因此未使用索引。
如果期望*:与索引定义中的名称空间匹配,那么这可能是反直觉的。
为了使查询能够使用索引,索引需要变得更少限制,或者查询需要变得更严格。
以下限制性较小的索引customer_id_index2可成功地使用同一查询:
CREATEUNIQUEINDEXcustomer_id_index2ONcustomer(xmlcol)
GENERATEKEYUSINGXMLPATTERN'/*:Customer/@id'ASSQLDOUBLE%以下更严格的查询可以使用初始索引customer_id_index:
SELECTxmlcolFROMcustomer
WHEREXMLEXISTS('
DECLARENAMESPACEns="http://mynamespace.org/cust";
$xmlcol/ns:Customer[@id=1042]'
PASSINGxmlcolAS"xmlcol")%当在查询中显式指定适当的名称空间时,可以使用索引customer_id_index,因为查询现在与索引的限制一样严格。
也可以使用索引customer_id_index2,因为它的限制性小于此示例中的查询。
父主题:有关将索引与查询进行匹配的准则概述
延伸文章資訊
- 1索引_百度百科
索引是為了加速對錶中數據行的檢索而創建的一種分散的存儲結構。索引是針對表而建立的,它是由數據頁面以外的索引頁面組成的,每個索引頁面中的行都會含有邏輯指針,以便 ...
- 2內容搜尋與索引
部署索引定義
- 3SQL Server 和Azure SQL 索引架構和設計指南
定義索引時,請考慮是否要以遞增或遞減順序儲存索引鍵資料行的資料。 遞增是預設值,而且會維持與舊版資料庫引擎的相容性。 CREATE INDEX、CREATE TABLE ...
- 4目錄、書目、目次及索引之概念釐清 - 全國新書資訊網
「索引(index)」及「書後索引(book index)」等,是我們向來耳熟能詳的圖書 ... 首先查考館藏之圖書資訊學語彙詞典及參考工具書指南中,針對這幾個語詞的定義與範疇.
- 5索引(Indexing) - 技術服務小百科
索引(Indexing) ... 索引又稱引得,舊稱韻編、通檢、備檢、便檢、檢目、玉鍵、針線等。 ... 綜觀來說,索引即為把文字資料(或非書資源)中包括的各種專名(人名 ...