Il semble que j'ai répondu à ma propre question après un peu plus de recherches en ligne :
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)
Utiliser CROSS APPLY
Je peux sélectionner le grandparent
de niveau supérieur nœud et utilisez-le pour sélectionner l'enfant parent
nœuds et ainsi de suite. En utilisant cette méthode, j'ai retiré ma requête de l'exécution en environ 1 minute 30 secondes jusqu'à environ 6 secondes .
Fait intéressant cependant, si j'utilise le "vieux" OPEN XML
méthode pour récupérer les mêmes données, la requête s'exécute en 1 seconde !
Il semble que vous devrez peut-être aborder l'utilisation de ces deux techniques au cas par cas en fonction de la taille/complexité attendue du document transmis.