Rumah >pangkalan data >tutorial mysql >Adakah SQL Menjamin Penilaian Litar Pintas dalam Klausa WHERE?
SQL WHERE Penilaian Klausa: Diterangkan Litar Pintas
Soalan lazim mengenai klausa WHERE
SQL berkenaan dengan penilaian ungkapan boolean: adakah SQL menggunakan penilaian litar pintas? Ini bermakna penilaian dihentikan sebaik sahaja keputusannya pasti, berpotensi memintas bahagian akhir ungkapan.
Piawaian dan Perintah Penilaian ANSI SQL
Piawaian ANSI SQL tidak mentakrifkan penilaian litar pintas secara eksplisit untuk fasal WHERE
. ANSI SQL Draf 2003 menentukan bahawa susunan penilaian ungkapan adalah bergantung kepada pelaksanaan. Ini meninggalkan keputusan sama ada untuk melaksanakan litar pintas kepada vendor pangkalan data individu atau tidak.
Pelaksanaan Khusus Pangkalan Data
Oleh itu, tingkah laku litar pintas berbeza dengan ketara merentas sistem pangkalan data:
AND
dan OR
.OPTIMIZER_MODE
.AND
sahaja.Contoh Ilustrasi
Pertimbangkan pertanyaan ini:
<code class="language-sql">SELECT * FROM Table t WHERE @key IS NULL OR (@key IS NOT NULL AND @key = t.Key) </code>
Jika @key
ialah NULL
, syarat pertama (@key IS NULL
) ialah TRUE
. Dalam SQL Server, penilaian litar pintas akan melangkau syarat kedua (@key IS NOT NULL AND @key = t.Key
), kerana keputusan keseluruhan sudah diketahui.
Pengambilan Utama
Piawaian ANSI SQL tidak menjamin penilaian litar pintas dalam fasal WHERE
. Kehadiran dan tingkah lakunya adalah khusus pangkalan data. Sentiasa rujuk dokumentasi sistem pangkalan data anda untuk memahami strategi penilaiannya.
Atas ialah kandungan terperinci Adakah SQL Menjamin Penilaian Litar Pintas dalam Klausa WHERE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!