Zdá se, že jsem odpověděl na svou vlastní otázku, když jsem se trochu víc rozkoukal online:
SELECT
grandparent.gname.value('@name', 'VARCHAR(15)'),
parent.pname.value('@name', 'VARCHAR(15)'),
child.cname.value('@name', 'VARCHAR(15)')
FROM
@xmlFamilyTree.nodes('/grandparent') AS grandparent(gname)
CROSS APPLY
grandparent.gname.nodes('*') AS parent(pname)
CROSS APPLY
parent.pname.nodes('children/*') AS child(cname)
Pomocí CROSS APPLY
Mohu vybrat grandparent
nejvyšší úrovně uzel a použijte jej k výběru podřízeného parent
uzly a tak dále. Pomocí této metody jsem přerušil spuštění dotazu přibližně za 1 minutu 30 sekund přibližně na 6 sekund .
Zajímavé však je, že pokud použiji "starý" OPEN XML
metoda k načtení stejných dat, dotaz se provede za 1 sekundu !
Zdá se, že možná budete muset přistupovat k použití těchto dvou technik případ od případu v závislosti na očekávané velikosti/složitosti předávaného dokumentu.