Cross Apply vs. Inner Joint: Pengoptimuman Prestasi untuk Set Data Besar
Penggunaan silang terbukti amat berguna apabila berurusan dengan hubungan jadual yang rumit atau operasi yang tidak mudah dicapai dengan cantuman dalaman. Ia menjana baris daripada jadual sebelah kanan untuk setiap baris dalam jadual sebelah kiri.
Walaupun kedua-dua sapukan silang dan sambung dalam boleh menghasilkan hasil yang serupa, sapukan silang selalunya menunjukkan kecekapan yang unggul, terutamanya apabila memproses set data yang luas dan menggunakan pembahagian atau kelui.
Kelebihan utama penggunaan silang ialah keupayaannya untuk berfungsi tanpa fungsi takrif pengguna (UDF) sebagai jadual sebelah kanan, menawarkan fleksibiliti dalam pelbagai situasi.
Untuk menyerlahkan perbezaan prestasi, mari kita periksa senario dengan jadual "induk" yang mengandungi 20 juta rekod. Pertanyaan gabungan dalaman yang mendapatkan semula tiga baris terakhir untuk setiap rekod dalam jadual "t" yang lebih kecil mengambil masa lebih kurang 30 saat:
<code class="language-sql">WITH q AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY id) AS rn FROM master ), t AS ( SELECT 1 AS id UNION ALL SELECT 2 ) SELECT * FROM t JOIN q ON q.rn <= t.id</code>
Walau bagaimanapun, pertanyaan penggunaan silang yang setara selesai hampir serta-merta:
<code class="language-sql">WITH t AS ( SELECT 1 AS id UNION ALL SELECT 2 ) SELECT * FROM t CROSS APPLY ( SELECT TOP (t.id) m.* FROM master m ORDER BY id ) q</code>
Perbezaan prestasi dramatik ini menggariskan faedah kecekapan penggunaan silang apabila mengendalikan manipulasi data yang kompleks dalam set data yang besar.
Atas ialah kandungan terperinci Cross Apply vs. Inner Join: Bilakah Cross Apply Menawarkan Kecekapan Unggul untuk Set Data Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!