ऐसा लगता है कि मुझे आखिरकार एक समाधान मिल गया है:
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) को अनुकूलित किया जा सकता है और जहां आईडी (चुनें ...) नहीं हो सकती है, इसका कारण यह है कि (1,2 ,3,4,5,6,7,8,9,10) एक स्थिर व्यंजक है, जबकि चयन नहीं है।
और तेज़ क्वेरी योजना में इनका पता लगाना
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.2ms, और अब यह उपयोग करता है
Recheck Cond: (id = ANY ($1))
Index Cond: (id = ANY ($1))
और बिटमैप योजना में स्कैन करता है।