Rumah >pangkalan data >tutorial mysql >Pengoptimuman Klausa EXISTS: SELECT 1 vs. SELECT * — Adakah Ia Penting?
*WUJUD prestasi klausa: PILIH 1 lwn. PILIH **
Dalam SQL, klausa EXISTS digunakan untuk menyemak sama ada terdapat baris yang sepadan dengan keadaan yang ditentukan dalam subkueri. Pembangun telah lama menggunakan kedua-dua SELECT 1 dan SELECT * dalam pertanyaan EXISTS, yang menimbulkan persoalan: Pendekatan manakah yang lebih cekap?
Pengoptimuman Pelayan SQL
Menurut Microsoft, SQL Server cukup bijak untuk mengenali penggunaan EXISTS tanpa mengira senarai SELECT subquery. Ia tidak mengembalikan sebarang data kepada sistem, jadi klausa SELECT * dan SELECT 1 adalah setara dari segi prestasi.
Menurut dokumentasi Microsoft:
"Senarai pilihan subkueri 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 dinyatakan dalam subkueri .*"
Pengesahan Kendiri
Untuk mengesahkan tingkah laku ini, anda boleh menjalankan pertanyaan berikut:
<code class="language-sql">SELECT whatever FROM yourtable WHERE EXISTS(SELECT 1/0 FROM someothertable WHERE a_valid_clause)</code>
Jika senarai SELECT mengambil bahagian, pertanyaan ini akan mencetuskan ralat bahagi dengan sifar. Walau bagaimanapun, kerana SQL Server memahami konteks klausa EXISTS, ia tidak melakukan sebarang pengiraan pada senarai SELECT.
SQL Standard
Piawaian ANSI SQL 1992 menjelaskan lagi tingkah laku ini, dengan menyatakan bahawa dalam konteks predikat EXISTS, senarai pilih "*" adalah bersamaan dengan sebarang nilai literal.
Kesimpulan
Dalam SQL Server, memilih SELECT 1 dan SELECT * dalam klausa EXISTS tidak menjejaskan prestasi. Kedua-dua kaedah menghasilkan hasil yang sama kerana pengoptimum mengenali tujuannya dan tidak mengembalikan data kepada sistem.
Atas ialah kandungan terperinci Pengoptimuman Klausa EXISTS: SELECT 1 vs. SELECT * — Adakah Ia Penting?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!