Rumah >pangkalan data >tutorial mysql >SELECT 1 vs. SELECT * dalam EXISTS Subqueries: Adakah Ia Penting untuk Prestasi?

SELECT 1 vs. SELECT * dalam EXISTS Subqueries: Adakah Ia Penting untuk Prestasi?

Barbara Streisand
Barbara Streisandasal
2025-01-15 20:14:42890semak imbas

SELECT 1 vs. SELECT * in EXISTS Subqueries: Does it Matter for Performance?

*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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn