私はついに解決策を見つけたようです:
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;
@Dukelingのアイデアを詳しく説明した後:
(1,2,3,4,5,6,7,8,9,10)のidは最適化でき、(select ...)のidは最適化できないのではないかと思いますが、その理由は(1,2 、3,4,5,6,7,8,9,10)は定数式ですが、selectはそうではありません。
より高速なクエリプランでこれらを見つける
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[]))
これは、質問の最初のクエリよりもさらに高速で、約1.2ミリ秒で、現在は
を使用しています。Recheck Cond: (id = ANY ($1))
Index Cond: (id = ANY ($1))
計画内のビットマップスキャン。