PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

सबक्वेरी खराब प्रदर्शन के साथ PostgreSQL IN ऑपरेटर

ऐसा लगता है कि मुझे आखिरकार एक समाधान मिल गया है:

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))

और बिटमैप योजना में स्कैन करता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MacOS 10.9.5 . पर Psycopg2 स्थापित करने में त्रुटि

  2. पोस्टग्रेस्क्ल में अंतरराष्ट्रीय वर्णों पर निचला () फ़ंक्शन

  3. ग्रुप बाय + केस स्टेटमेंट

  4. जीरो डाउनटाइम के साथ PostgreSQL 11 को PostgreSQL 12 में अपग्रेड कैसे करें

  5. क्लाउड विक्रेता डीप-डाइव:DigitalOcean पर PostgreSQL