ORDER BY子句中的DB2 pureXML索引用法

时间:2014-02-27 14:36:32

标签: xml database db2 xquery xquery-sql

我在DB2 XML中遇到了索引使用问题。我有一个用户的数据库表,包括id + xml文档+时间戳。我感兴趣的是找到用户并按加入日期订购。

索引定义:

create index idx_joindate on "Users"("userXML") generate keys 
    using xmlpattern '/*:User/*:joinDate' as sql timestamp;

SQL查询:

SELECT "Users".* FROM "Users" 
  ORDER BY 
   XMLCAST(
    XMLQUERY('$i/*:User/*:joinDate' PASSING "userXML" AS "i") 
   as TIMESTAMP) DESC
FETCH FIRST 20 ROWS ONLY

XQuery:

xquery
let $sorted :=
   for $user in db2-fn:xmlcolumn("Users.userXML")
   order by xs:dateTime($user/*:User/*:joinDate) descending
   return $user
for $user in subsequence($sorted, 1, 20)
return $user

两个查询实际上都工作正常,但我希望它们在joinDate上使用已定义的索引。对于XQuery和SQL查询都不会发生这种情况。

1 个答案:

答案 0 :(得分:0)

我假设您希望DB2使用XML索引来避免对表行进行排序,但是,XML索引存储指向XML文档节点的指针,可能存储每行的多个节点,而不是RID。 XML数据存储在不同的物理结构中,因此我不认为XML索引可以按照您想要的方式使用。