Det verkar som att jag äntligen har hittat en lösning:
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;
Efter att ha utvecklat @Dukelings idé:
Jag misstänker var id i (1,2,3,4,5,6,7,8,9,10) kan optimeras och där id i (välj ...) inte kan, anledningen är att(1,2) ,3,4,5,6,7,8,9,10) är ett konstant uttryck, medan markeringen inte är det.
och lokalisera dessa i en snabbare frågeplan
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[]))
detta fungerar ännu snabbare än den första frågan i frågan, cirka 1,2 ms, och nu använder den
Recheck Cond: (id = ANY ($1))
Index Cond: (id = ANY ($1))
och bitmappsskanningar i planen.