Rumah >pangkalan data >tutorial mysql >SELECT 1 vs. SELECT * dalam EXISTS Subqueries: Adakah Ia Penting untuk Prestasi?
*WUJUD pengoptimuman subkueri: perbezaan prestasi antara PILIH 1 dan PILIH **
Apabila menggunakan operator EXISTS dalam pertanyaan SQL, terdapat pertikaian tentang sama ada untuk menentukan SELECT 1 atau SELECT * dalam subquery. Artikel ini meneroka kesan prestasi kedua-dua pendekatan.
**Kaedah tradisional: PILIH ***
Secara tradisinya, subkueri menggunakan SELECT * kerana ia mendapatkan semula semua lajur dalam subkueri.
<code class="language-sql">IF EXISTS (SELECT * FROM TABLE WHERE Columns=@Filters) BEGIN UPDATE TABLE SET ColumnsX=ValuesX WHERE Columns=@Filters END</code>
Kaedah alternatif: PILIH 1
Pakar pangkalan data mengesyorkan bahawa untuk semakan EXISTS, menggunakan SELECT 1 adalah lebih cekap kerana ia hanya mengembalikan satu nilai.
<code class="language-sql">IF EXISTS (SELECT 1 FROM TABLE WHERE Columns=@Filters) BEGIN UPDATE TABLE SET ColumnsX=ValuesX WHERE Columns=@Filters END</code>
Perbezaan Prestasi
Walaupun dikatakan potensi faedah prestasi SELECT 1, Microsoft SQL Server direka untuk mengoptimumkan subkueri operator EXISTS. Sama ada anda menggunakan SELECT 1 atau SELECT *, SQL Server tidak mengembalikan data kepada sistem.
Pengesahan
Untuk mengesahkan pengoptimuman ini, cuba laksanakan pertanyaan berikut:
<code class="language-sql">SELECT whatever FROM yourtable WHERE EXISTS( SELECT 1/0 FROM someothertable WHERE a_valid_clause )</code>
Tiada ralat akan dilemparkan walaupun subkueri melakukan pembahagian yang tidak sah. Ini menunjukkan bahawa senarai EXISTS dalam subquery SELECT tidak akan dinilai.
SQL Standard
Piawaian ANSI SQL 1992 dengan jelas menyatakan bahawa apabila senarai SELECT mengandungi hanya "*" dalam subkueri EXISTS, ia adalah bersamaan dengan literal arbitrari.
Kesimpulan
Berdasarkan keupayaan pengoptimuman SQL Server dan piawaian SQL, tiada perbezaan prestasi apabila menggunakan SELECT 1 atau SELECT * dalam subkueri EXISTS. Kedua-dua kaedah akan mengembalikan hasil yang sama dengan kecekapan yang sama.
Atas ialah kandungan terperinci SELECT 1 vs. SELECT * dalam EXISTS Subqueries: Adakah Ia Penting untuk Prestasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!