Rumah >pangkalan data >tutorial mysql >Pengoptimuman Klausa EXISTS: SELECT 1 vs. SELECT * — Adakah Ia Penting?

Pengoptimuman Klausa EXISTS: SELECT 1 vs. SELECT * — Adakah Ia Penting?

Barbara Streisand
Barbara Streisandasal
2025-01-15 20:48:43639semak imbas

EXISTS Clause Optimization: SELECT 1 vs. SELECT * — Does it Matter?

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

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