Rumah >pangkalan data >tutorial mysql >EXISTS Subqueries: PILIH 1 atau PILIH * – Adakah Ia Penting untuk Prestasi?
*WUJUD pertanyaan: PILIH 1 lwn. PILIH **
Apabila menggunakan subquery EXISTS dalam SQL, soalan biasa ialah: Patutkah SELECT 1 atau SELECT * digunakan dalam subquery?
*PILIH lwn. PILIH 1**
Pada masa lalu, adalah dianggap bahawa SELECT 1 adalah lebih cekap daripada SELECT * dalam subkueri EXISTS. Walau bagaimanapun, ini tidak berlaku. SQL Server mengoptimumkan semakan EXISTS untuk mengembalikan NO DATA kepada sistem tanpa mengira lajur yang dinyatakan dalam senarai SELECT subquery.
Perspektif Microsoft
Menurut Microsoft: "Senarai SELECT subquery yang diperkenalkan oleh EXISTS hampir selalu mengandungi asterisk (*). Tiada sebab untuk menyenaraikan nama lajur, kerana anda hanya menguji sama ada terdapat baris yang memenuhi syarat yang ditetapkan dalam subkueri ”
Demo
Untuk mengesahkan ini, pertimbangkan pertanyaan berikut:
<code class="language-sql">SELECT whatever FROM yourtable WHERE EXISTS( SELECT 1/0 FROM someothertable WHERE a_valid_clause )</code>
Jika SELECT * benar-benar melakukan sebarang operasi pada lajur yang dipilih, pertanyaan akan menghasilkan ralat bahagi dengan sifar. Walau bagaimanapun, ia tidak, menunjukkan bahawa senarai SELECT subquery diabaikan dan hanya digunakan untuk menentukan kewujudan baris.
SQL Standard
Piawaian SQL juga menyokong pandangan ini: "Jika '' hanya terkandung dalam
Kesimpulan
Ringkasnya, tiada perbezaan prestasi menggunakan SELECT 1 atau SELECT * dalam subkueri EXISTS. Oleh itu, adalah disyorkan pilihan yang lebih mudah dibaca atau konsisten dengan gaya pengekodan anda.Atas ialah kandungan terperinci EXISTS Subqueries: PILIH 1 atau PILIH * – Adakah Ia Penting untuk Prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!