Использование индекса DB2 pureXML в предложении ORDER BY

У меня возникла проблема с использованием индекса в DB2 XML. У меня есть таблица базы данных с пользователями, состоящая из id + xml document + timestamp. Мне интересно найти пользователей и упорядочить их по дате присоединения.

Определение индекса:

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.


person Martin Müller    schedule 27.02.2014    source источник
comment
amolnpujari.wordpress.com/2008/04/12/db2-native -xml может вам помочь   -  person Amol Pujari    schedule 20.03.2014


Ответы (1)


Я предполагаю, что вы ожидаете, что DB2 будет использовать XML-индекс, чтобы избежать сортировки строк таблицы, однако XML-индексы хранят указатели на узлы XML-документа, возможно, несколько узлов для каждой строки, а не RID. XML-данные хранятся в отдельных физических структурах, поэтому я не думаю, что XML-индексы можно использовать так, как вы хотите.

person mustaccio    schedule 27.02.2014