Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengoptimumkan Penyata `CASE` dalam Klausa `WHERE` SQL Server 2008?
Mengoptimumkan Penyata KES dalam SQL Server 2008 WHERE Klausa
Menggunakan pernyataan CASE
dalam WHERE
klausa dalam SQL Server 2008 kadangkala boleh membawa kepada isu prestasi atau hasil yang salah. Kuncinya ialah memahami cara mengintegrasikan pernyataan CASE
dengan betul ke dalam logik bersyarat keseluruhan.
Penggunaan Betul:
Pernyataan CASE
hendaklah sentiasa menjadi sebahagian daripada perbandingan yang lebih besar, bukan satu-satunya perbandingan itu sendiri. Struktur yang betul melibatkan penggunaan pernyataan CASE
untuk menghasilkan nilai yang kemudiannya dibandingkan:
<code class="language-sql">WHERE co.DTEntered = CASE WHEN LEN('blah') = 0 THEN co.DTEntered ELSE '2011-01-01' END</code>
Penggunaan Salah (dan mengapa ia gagal):
Contoh berikut adalah cacat kerana pernyataan CASE
tidak menghasilkan nilai untuk perbandingan; ia cuba mengawal keseluruhan operasi perbandingan secara langsung, yang bukan cara CASE
berfungsi dalam klausa WHERE
:
<code class="language-sql">WHERE CASE LEN('TestPerson') WHEN 0 THEN co.personentered = co.personentered ELSE co.personentered LIKE '%TestPerson' END</code>
Pendekatan yang Lebih Baik: Menggunakan Pernyataan ATAU
Apabila anda mendapati diri anda memerlukan CASE
pernyataan dalam klausa WHERE
, pemfaktoran semula ke dalam OR
kenyataan selalunya memberikan penyelesaian yang lebih cekap dan boleh dibaca:
<code class="language-sql">WHERE ( (LEN('TestPerson') = 0 AND co.personentered = co.personentered ) OR (LEN('TestPerson') > 0 AND co.personentered LIKE '%TestPerson') )</code>
Implikasi Prestasi:
Kedua-dua penyataan CASE
dan keadaan OR
kompleks dalam klausa WHERE
boleh menghalang pengoptimuman pertanyaan dan penggunaan indeks. Sentiasa berusaha untuk mendapatkan klausa WHERE
yang paling mudah dan cekap. Pertimbangkan struktur pertanyaan alternatif atau strategi pengindeksan untuk meningkatkan prestasi jika perlu.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Penyata `CASE` dalam Klausa `WHERE` SQL Server 2008?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!