SQL comma join dan eksplisit JOIN: analisis kesesakan prestasi
Apabila menulis pertanyaan pangkalan data, mudah untuk mengabaikan kata kunci JOIN yang jelas dan menggunakan sintaks yang dipisahkan koma yang lebih biasa:
<code class="language-sql">SELECT a.someRow, b.someRow FROM tableA AS a, tableB AS b WHERE a.ID=b.ID AND b.ID= $someVar</code>
Apabila anda mendalami asas SQL, anda mungkin menemui sintaks JOIN yang eksplisit dan tertanya-tanya sama ada pertanyaan dipisahkan koma yang anda gunakan sebelum ini menyebabkan sebarang masalah.
Risiko penyambungan koma
Walaupun sintaks sambung koma secara fungsinya setara dengan INNER JOIN, dalam beberapa kes biasa, ia boleh menyebabkan isu prestasi yang tidak dijangka. Pertimbangkan contoh berikut:
<code class="language-sql">SELECT * FROM people p, companies c WHERE p.companyID = c.id AND p.firstName = 'Daniel'</code>
Dalam pertanyaan ini, pangkalan data akan mengira produk Cartesian bagi jadual orang dan syarikat sebelum menggunakan penapis. Produk Cartesian tanpa kekangan ini hanya wujud dalam ingatan dan berumur pendek, tetapi pengiraannya boleh memakan masa yang lama.
Pendekatan yang lebih baik: SERTAI eksplisit
Pendekatan yang lebih cekap ialah menggunakan kata kunci JOIN untuk mengumpulkan kekangan dengan JOIN:
<code class="language-sql">SELECT * FROM people p JOIN companies c ON p.companyID = c.id WHERE p.firstName = 'Daniel'</code>
Pendekatan ini membolehkan pangkalan data mengira secara langsung JOIN yang dikekang sepenuhnya, mengelakkan pengiraan produk Cartesian yang tidak perlu.
Ringkasan
Walaupun tiada apa-apa yang salah dengan cantuman koma, biasanya disyorkan untuk menggunakan sintaks JOIN yang eksplisit. Ini bukan sahaja menjadikan kod lebih mudah dibaca dan diselenggara, tetapi ia juga boleh meningkatkan prestasi dalam beberapa kes. Dengan menggunakan kata kunci JOIN, anda boleh mengoptimumkan pertanyaan SQL anda dan memastikan ia berjalan seefisien mungkin.
Atas ialah kandungan terperinci Comma Joins lwn. Explicit JOIN dalam SQL: Adakah Comma Joins Bottleneck Prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!