मुझे लगता है कि OFFSET 0
बेहतर तरीका है क्योंकि यह अधिक स्पष्ट रूप से एक हैक है जो दिखा रहा है कि कुछ अजीब चल रहा है, और इसकी संभावना नहीं है कि हम कभी भी OFFSET 0
के आसपास ऑप्टिमाइज़र व्यवहार को बदल देंगे। ... जबकि <स्ट्राइक>उम्मीद है कि सीटीई किसी बिंदु पर इनलाइन करने योग्य हो जाएंगेस्ट्राइक> PostgreSQL 12 में डिफ़ॉल्ट रूप से CTE इनलाइन करने योग्य हो गए। निम्नलिखित स्पष्टीकरण पूर्णता के लिए है; सीमस के उत्तर का उपयोग करें।
असंबद्ध उपप्रश्नों के लिए आप कर सकते थे PostgreSQL 11 और पुराने के इनलाइन WITH
के इनकार का फायदा उठाएं अपनी क्वेरी को इस रूप में फिर से लिखने के लिए क्वेरी शब्द:
WITH t AS (
SELECT * FROM tbl WHERE id IN ('6d48fc431d21', 'd9e659e756ad')
)
SELECT COUNT(*)
FROM t
WHERE data ? 'building_floorspace'
AND data ?| ARRAY['elec_mean_monthly_use', 'gas_mean_monthly_use'];
इसका प्रभाव OFFSET 0
. के समान ही है हैक, और offset 0
. की तरह हैक पीजी के ऑप्टिमाइज़र में विचित्रताओं का शोषण करता है जिसका उपयोग लोग पीजी की क्वेरी संकेतों की कमी को पूरा करने के लिए करते हैं ... उन्हें क्वेरी संकेतों के रूप में उपयोग करके।
लेकिन OFFSET 0
हैक कुछ हद तक आधिकारिक तौर पर धन्य है, जबकि CTE दुरुपयोग अब PostgreSQL 12 में काम नहीं करता है। (याय!)।