Gunakan ANY dan bukannya IN
dalam klausa WHERESelain klausa IN tradisional, anda boleh mempertimbangkan untuk menggunakan ANY untuk menapis hasil dalam klausa WHERE. PostgreSQL menyediakan dua varian sintaks:
Dalam ungkapan:
SEBARANG ungkapan:
Walaupun kedua-dua kaedah boleh menggunakan subkueri, bentuk kedua mereka berbeza dalam jangkaan.
Pertimbangkan perkara berikut:
Dari segi prestasi, ANY tidak mungkin jauh lebih pantas daripada IN. Pilihan antara kedua-duanya bergantung terutamanya pada kemudahan menyediakan nilai yang ditapis.
Kaedah subkueri:
Jika nilai penapis sudah wujud dalam pangkalan data, menggunakan subkueri atau menyertai jadual sumber dengan jadual sasaran boleh meningkatkan kecekapan.
Kaedah tatasusunan:
Untuk prestasi terbaik, berikan nombor yang besar daripada klien melalui tatasusunan, unnest() atau join, atau sediakan ungkapan jadual menggunakan VALUES.
= MANA-MANA sintaks:
Untuk ungkapan tatasusunan, PostgreSQL menerima pembina tatasusunan (ARRAY[1,2,3]) atau literal tatasusunan ('{1,2,3}'). Untuk keselamatan jenis, penukaran jenis eksplisit boleh digunakan:
<code class="language-sql">ARRAY[1,2,3]::numeric[] '{1,2,3}'::bigint[]</code>
Melalui tatasusunan daripada Ruby:
Untuk menghantar tatasusunan daripada Ruby, gunakan sintaks berikut:
<code class="language-ruby">MyModel.where('id = ANY(ARRAY[?]::int[])', ids.map { |i| i})</code>
Atas ialah kandungan terperinci Sekiranya saya Menggunakan IN atau ANY dalam PostgreSQL WHERE Klausa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!