जैसा कि @Denis ने पहले ही टिप्पणी कर दी है:LATERAL
. की कोई आवश्यकता नहीं है .साथ ही, आपकी सबक्वेरी ने गलत कॉलम का चयन किया। यह काम करता है:
SELECT t1.t1_id, t1.t1_data, t2_ids
FROM t1
LEFT JOIN (
SELECT t1_id, array_agg(t2_id) AS t2_ids
FROM t1_t2_rel
GROUP BY 1
) sub USING (t1_id);
प्रदर्शन और परीक्षण
आपके द्वारा उल्लिखित आगामी अनुक्रमिक स्कैन के संबंध में:यदि आप पूरी तालिका को क्वेरी करते हैं, तो अनुक्रमिक स्कैन अक्सर तेज़ होता है . आपके द्वारा चलाए जा रहे संस्करण, आपके हार्डवेयर, आपकी सेटिंग्स और कार्डिनैलिटी के आंकड़े और आपके डेटा के वितरण पर निर्भर करता है। चुनिंदा WHERE
. के साथ प्रयोग करें खंड जैसे WHERE t1.t1_id < 1000
या WHERE t1.t1_id = 1000
और प्लानर सेटिंग के साथ संयोजित करें
विकल्पों के बारे में जानने के लिए:
SET enable_seqscan = off;
SET enable_indexscan = off;
रीसेट करने के लिए:
RESET enable_seqscan;
RESET enable_indexscan;
केवल आपके स्थानीय सत्र में, ध्यान रहे! dba.SE पर यह संबंधित उत्तर
अधिक निर्देश हैं।
बेशक, आपकी सेटिंग भी बंद हो सकती है: