आपकी धीमी क्वेरी सभी 44255 पंक्तियों के लिए बड़े jsonb डेटा को नष्ट कर रही है, और फिर शीर्ष 20 पंक्तियों को चुनने के लिए पार्स किए गए मानों को सॉर्ट के माध्यम से ले जा रही है। (मुझे नहीं पता कि यह डीटोस्टिंग इतनी उत्सुकता से क्यों करता है)। तो 44235 JSONB को सिर्फ फेंके जाने के लिए डिटोस्ट किया गया।
आपकी तेज़ क्वेरी (संभवतः) हैश जॉइन से टोस्ट पॉइंटर्स लौटा रही है, उन छोटे पॉइंटर्स के साथ पंक्तियों को सॉर्ट कर रही है, और फिर केवल 20 बचे हुए लोगों को हटा रही है। EXPLAIN ANALYZE के मामले में, यह बचे हुए लोगों को भी नहीं हटाता है, यह केवल पॉइंटर्स को दूर फेंक देता है।
यही "क्यों" है, इसके बारे में क्या करना है, यदि आप वास्तव में शीर्ष भाग के नीचे किसी भी क्वेरी को बदल नहीं सकते हैं, तो मुझे संदेह है कि सर्वर साइड पर आप इसके बारे में कुछ भी कर सकते हैं।
यदि आप क्वेरी को अधिक महत्वपूर्ण रूप से संशोधित कर सकते हैं, तो आप सीटीई के साथ रन टाइम में सुधार कर सकते हैं। CTE से पूरे jsonb का चयन करने के लिए कहें, और फिर CTE पर सेलेक्ट करने से उसमें से मान निकल जाता है।
WITH T as (select cfiles.property_values as "1907", <rest of query>)
SELECT "1907"->>'name1', "1907"->>'name2', <rest of select list> from T;