PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Operator PostgreSQL IN dengan kinerja buruk subquery

Sepertinya saya akhirnya menemukan solusi:

select * 
  from view1 
  where view1.id = ANY(
                       (select array(select ext_id 
                                     from aggregate_table 
                                     order by somedata limit 10)
                       )::integer[]
                      ) 
  order by view1.somedata;

Setelah menjabarkan ide @Dukeling:

Saya menduga di mana id di (1,2,3,4,5,6,7,8,9,10) dapat dioptimalkan dan di mana id di (pilih ...) tidak bisa, alasannya adalah (1,2 ,3,4,5,6,7,8,9,10) adalah ekspresi konstan, sedangkan pilih tidak.

dan menemukan ini dalam paket kueri yang lebih cepat

Recheck Cond: (id = ANY ('{1,2,3,4,5,6,7,8,9,10}'::integer[]))
Index Cond: (id = ANY ('{1,2,3,4,5,6,7,8,9,10}'::integer[]))

ini bekerja lebih cepat daripada kueri pertama dalam pertanyaan, sekitar 1,2 md, dan sekarang menggunakan

Recheck Cond: (id = ANY ($1))
Index Cond: (id = ANY ($1))

dan pemindaian bitmap dalam paket.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gagal memuat modul sql ke dalam cluster database selama Instalasi PostgreSQL

  2. Bagaimana cara membaca semua baris dari tabel besar?

  3. Postgresql -bash:psql:perintah tidak ditemukan

  4. Opsi Failover Cluster Basis Data Lengkap Multi-Cloud untuk PostgreSQL

  5. Memahami Jenis dan Fungsi Tanggal PostgreSQL (berdasarkan Contoh)