Di PostgreSQL, persisnya apa yang akan Anda dapatkan di sini bergantung pada tabel yang mendasarinya, jadi Anda harus menggunakan EXPLAIN ANALYZE pada beberapa kueri sampel terhadap subset data yang berguna untuk mengetahui dengan tepat apa yang akan dilakukan pengoptimal (pastikan tabel Anda 'berlawanan telah DIANALISIS juga). IN dapat diproses dengan beberapa cara berbeda, dan itulah mengapa Anda perlu melihat beberapa sampel untuk mengetahui alternatif mana yang digunakan untuk data Anda. Tidak ada jawaban umum yang sederhana untuk pertanyaan Anda.
Adapun pertanyaan spesifik yang Anda tambahkan dalam revisi Anda, terhadap kumpulan data sepele tanpa indeks yang terlibat, inilah contoh dari dua rencana kueri yang akan Anda dapatkan:
postgres=# explain analyze select * from x where s in ('123','456');
Seq Scan on x (cost=0.00..84994.69 rows=263271 width=181) (actual time=0.015..1819.702 rows=247823 loops=1)
Filter: (s = ANY ('{123,456}'::bpchar[]))
Total runtime: 1931.370 ms
postgres=# explain analyze select * from x where s='123' or s='456';
Seq Scan on x (cost=0.00..90163.62 rows=263271 width=181) (actual time=0.014..1835.944 rows=247823 loops=1)
Filter: ((s = '123'::bpchar) OR (s = '456'::bpchar))
Total runtime: 1949.478 ms
Kedua runtime tersebut pada dasarnya identik, karena waktu pemrosesan yang sebenarnya didominasi oleh pemindaian sekuensial di seluruh tabel; berjalan beberapa kali menunjukkan perbedaan antara keduanya di bawah run to run margin of error. Seperti yang Anda lihat, PostgreSQL mengubah kasus IN menjadi menggunakan filter APAPUN, yang harus selalu dijalankan lebih cepat daripada serangkaian OR. Sekali lagi, kasus sepele ini belum tentu mewakili apa yang akan Anda lihat pada kueri serius yang melibatkan indeks dan sejenisnya. Bagaimanapun, mengganti IN secara manual dengan serangkaian pernyataan OR seharusnya tidak pernah lebih cepat, karena pengoptimal mengetahui hal terbaik yang harus dilakukan di sini jika memiliki data yang baik untuk digunakan.
Secara umum, PostgreSQL mengetahui lebih banyak trik tentang cara mengoptimalkan kueri yang rumit daripada pengoptimal MySQL, tetapi PostgreSQL juga sangat bergantung pada Anda yang telah memberikan cukup data kepada pengoptimal untuk digunakan. Tautan pertama di bagian "Pengoptimalan Kinerja" dari wiki PostgreSQL mencakup hal terpenting yang diperlukan untuk mendapatkan hasil yang baik dari pengoptimal.