Saya menjalankan kueri yang memproses beberapa node dari dokumen XML. Perkiraan biaya subtree saya adalah dalam jutaan dan tampaknya semuanya berasal dari operasi semacam sql server melakukan pada beberapa data yang saya ekstrak dari kolom xml melalui XPath. Operasi Urutkan memiliki perkiraan jumlah baris sekitar 19 juta, sedangkan jumlah baris aktual sekitar 800. Permintaan itu sendiri berjalan cukup baik (1 - 2 detik), tetapi perbedaan membuat saya bertanya-tanya tentang kinerja permintaan dan mengapa ini perbedaannya begitu besar?
sql-server
query-performance
xml
Peter Smith
sumber
sumber
Jawaban:
Tidak ada statistik yang dihasilkan pada kolom XML. Taksiran ditebak berdasarkan ekspresi yang digunakan saat menanyakan XML.
Menggunakan tabel ini:
Dan permintaan XML ini agak sederhana:
Akan memberi Anda satu baris yang dikembalikan tetapi perkiraan baris yang dikembalikan adalah 200. Itu akan menjadi 200 terlepas dari apa XML atau berapa banyak XML yang Anda masukkan ke dalam kolom XML untuk satu baris itu.
Ini adalah paket kueri dengan perkiraan jumlah baris ditampilkan.
Cara untuk meningkatkan, atau setidaknya mengubah, perkiraan adalah memberikan pengoptimal permintaan informasi lebih lanjut tentang XML. Dalam hal ini, karena saya tahu itu
root
benar - benar merupakan simpul root dalam XML, saya dapat menulis ulang kueri seperti ini.Itu akan memberi saya perkiraan 5 baris yang dikembalikan.
Penulisan ulang kueri mungkin tidak akan mempercepat penghancuran XML tetapi jika perkiraan lebih baik, kemungkinan pengoptimal kueri dapat membuat keputusan yang lebih cerdas untuk sisa kueri.
Saya belum menemukan dokumentasi tentang apa aturannya untuk perkiraan selain presentasi oleh Michael Rys di mana ia berkata:
sumber