Det ser ud til, at jeg endelig har fundet 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 at have uddybet @Dukelings idé:
Jeg formoder, hvor id i (1,2,3,4,5,6,7,8,9,10) kan optimeres, og hvor id i (vælg ...) ikke kan, grunden er, at(1,2) ,3,4,5,6,7,8,9,10) er et konstant udtryk, mens markeringen ikke er det.
og lokalisering af disse i en hurtigere forespørgselsplan
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[]))
dette virker endnu hurtigere end den første forespørgsel i spørgsmålet, ca. 1,2 ms, og nu bruger den
Recheck Cond: (id = ANY ($1))
Index Cond: (id = ANY ($1))
og bitmap-scanninger i planen.