索引定义的限制性 - IBM

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

要兼容, 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,因为它的限制性小于此示例中的查询。

父主题:有关将索引与查询进行匹配的准则概述



請為這篇文章評分?