我在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查询都不会发生这种情况。
答案 0 :(得分:0)
我假设您希望DB2使用XML索引来避免对表行进行排序,但是,XML索引存储指向XML文档节点的指针,可能存储每行的多个节点,而不是RID。 XML数据存储在不同的物理结构中,因此我不认为XML索引可以按照您想要的方式使用。