Hej,
Chciałbym możliwie jak najefektywniej przetwarzać kolumnę XMLType w tabeli X, to jest:
- Znaleźć wartość jakiegoś węzła w jak najkrótszym czasie, np. "root/pracownik/nazwisko" = 'Kowalski'
- 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>