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.