索引定义的限制 - IBM
文章推薦指數: 80 %
对查询的求值是否会频繁使用索引取决于索引定义相对于查询的限制性。
... 为了保持兼容,XML 数据索引需要将职员薪水属性节点包括在已建立索引的节点中,并将值 ...
DB210.5forLinux,UNIX,andWindows
索引定义的限制
对查询的求值是否会频繁使用索引取决于索引定义相对于查询的限制性。
下列示例显示可一起使用的若干查询和索引。
带有范围谓词的查询的索引
以下查询从具有XML列companydocs的表
companyinfo中检索公司信息以查找薪水超过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元素。
由于查询中使用*:来表示任何名称空间,因此未使用索引。
如果期望*:与索引定义中的名称空间匹配,那么这与期望相反。
为了使查询使用索引,索引的限制需要较少,或查询的限制需要较多。
对于相同查询,可以成功使用以下较少限制的索引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索引_百度百科
索引是為了加速對錶中數據行的檢索而創建的一種分散的存儲結構。索引是針對表而建立的,它是由數據頁面以外的索引頁面組成的,每個索引頁面中的行都會含有邏輯指針,以便 ...
- 3索引定义的限制性 - IBM
要兼容, XML 数据索引 需要将员工工资属性节点包括在已建立索引的节点中,并将值存储为DOUBLE 或DECIMAL 类型。 查询可以对XML 数据使用下列其中一个索引,例如: CREATE ...
- 4索引- 維基百科,自由的百科全書
- 5索引定义的限制 - IBM
对查询的求值是否会频繁使用索引取决于索引定义相对于查询的限制性。 ... 为了保持兼容,XML 数据索引需要将职员薪水属性节点包括在已建立索引的节点中,并将值 ...