Rumah >pangkalan data >tutorial mysql >Perlukah Saya Menggunakan `SEBARANG` Daripada `IN` dalam Pertanyaan SQL Saya untuk Prestasi Lebih Baik?
Meningkatkan prestasi pertanyaan SQL: Perbandingan dan aplikasi ANY
dan IN
Dalam pertanyaan SQL, menggunakan operator ANY
dan bukannya IN
kadangkala boleh mengoptimumkan prestasi. Artikel ini menerangkan cara melakukan penukaran dan cara menangani kemungkinan ralat.
Pertanyaan asal (menggunakan IN
):
<code class="language-ruby">MyModel.where(id: ids)</code>
Pertanyaan setara (menggunakan ANY
):
<code class="language-ruby">MyModel.where("id = ANY(VALUES(#{ids.join '),('}))")</code>
Pengendalian ralat tatasusunan kosong:
Jika ids
ialah tatasusunan kosong, menggunakan operator ANY
akan menyebabkan ralat sintaks. Oleh itu, sebelum menggunakan ANY
, pastikan anda memastikan tatasusunan tidak kosong.
IN
dan ANY
:
IN
terdapat dalam dua bentuk: subquery dan senarai nilai. Pengendali ANY
adalah serupa: subkueri dan ungkapan tatasusunan.
Tetapi ambil perhatian bahawa terdapat sedikit perbezaan dalam bentuk kedua kedua-dua operator ini: IN
menjangkakan senarai nilai, manakala ANY
menjangkakan tatasusunan. Apabila menggunakan borang kedua, senarai nilai mesti ditukar kepada tatasusunan.
IN
dan ANY
:
IN
dan ANY
kedua-duanya boleh digunakan untuk membandingkan nilai, tetapi ANY
lebih fleksibel dan boleh mengendalikan lebih banyak jenis pengendali. Walau bagaimanapun, IN
masih sah, dan dalaman boleh ditulis semula sebagai kes khas =
menggunakan operator ANY
.
Dari segi prestasi, tiada perbezaan yang ketara antara IN
dan ANY
. Mana satu yang anda pilih bergantung pada mana yang lebih mudah disediakan: senarai nilai atau tatasusunan. Jika ID yang akan diproses sudah disediakan dengan mudah sebagai tatasusunan, menggunakan ANY
mungkin lebih sesuai.
Melalui tatasusunan dalam Ruby:
Dalam Ruby, gunakan operator ANY
untuk menghantar tatasusunan kepada pertanyaan PostgreSQL Anda boleh menggunakan sintaks berikut:
<code class="language-ruby">MyModel.where('id = ANY(ARRAY[?]::int[])', ids.map { |i| i})</code>
Atas ialah kandungan terperinci Perlukah Saya Menggunakan `SEBARANG` Daripada `IN` dalam Pertanyaan SQL Saya untuk Prestasi Lebih Baik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!