Dường như tôi đã trả lời được câu hỏi của chính mình sau khi tìm hiểu kỹ hơn một chút trên mạng:
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)
Sử dụng CROSS APPLY
Tôi có thể chọn grandparent
cấp cao nhất và sử dụng nút này để chọn parent
con các nút và như vậy. Sử dụng phương pháp này, tôi đã thực hiện truy vấn trong khoảng 1 phút 30 giây xuống khoảng 6 giây .
Tuy nhiên, điều thú vị là nếu tôi sử dụng OPEN XML
"cũ" để truy xuất cùng một dữ liệu, truy vấn thực thi sau 1 giây !
Có vẻ như bạn có thể phải tiếp cận việc sử dụng hai kỹ thuật này trong từng trường hợp cụ thể tùy thuộc vào kích thước / độ phức tạp dự kiến của tài liệu được chuyển vào.