Przetwarzanie XMLType w Oracle

0

Hej,
Chciałbym możliwie jak najefektywniej przetwarzać kolumnę XMLType w tabeli X, to jest:

  1. Znaleźć wartość jakiegoś węzła w jak najkrótszym czasie, np. "root/pracownik/nazwisko" = 'Kowalski'
  2. Znaleźć kilka wartości w XMLu które mogłbym użyc później w innym zapytaniu, np. patrz punkt 1) + "root/pracownik/imie" + "root/pracownik/pensja" etc.

Wierszy w tabeli X mam pare tysięcy więc musi to być dość dobrze zoptymalizowane. Póki co próbowałem skorzystać z XMLTable i przekształcić xml na tabelę:

select xmldata.SURNAME, xmldata.NAME, xmldata.SALARY
(select columnaXMLTYPE from X) X,
(XMLTABLE 'root/'
PASSING x.columnaXMLTYPE 
COLUMNS
  "SURNAME" varchar(20) PATH 'pracownik/nazwisko',
  "NAME" varchar(20) PATH 'pracownik/name',
  "SALARY" varchar(20) PATH 'pracownik/pensja'
) xmldata;

Wszystko pięknie, ale gdy tylko dodam na końcu

) xmldata
WHERE xmldata.NAME = 'JAKIESIMIE';

To cały performance leci w kosmos i zapytanie trwa z 10 minut. Próbowałem jakiś kombinacji i np. tworzyć tabelę tymczasową z tego albo rzutować XML na clob i robić LIKE ale wszystko jedno i to samo, jakiekolwiek zastosowanie filtrowania wierszy zwalnia wszystko do 10-15minut z paru sekund.

XML jest bardzo prosty pare linijek w stylu
<root>
  <pracownik>
     <imie>Jakies imie</imie>
... etc
  </pracownik>
</root>
1

A o indeksowaniu XMLType słyszałeś? Jeśli nie, to może doczytaj https://docs.oracle.com/cd/B28359_01/appdev.111/b28369/xdb_indexing.htm i sprawdź czy rozwiązuje Twój problem.

0

Dzięki, założyłem index i teraz smiga :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1