索引定义的限制 - IBM

文章推薦指數: 80 %
投票人數:10人

对查询的求值是否会频繁使用索引取决于索引定义相对于查询的限制性。

... 为了保持兼容,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,因为它的限制比此示例中查询的限制要少。

父主题:用于匹配索引与查询的准则概述



請為這篇文章評分?