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

मैं पोस्टग्रेज़ को एक सबक्वायरी को इनलाइन करने से कैसे रोक सकता हूँ?

मुझे लगता है कि 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 में काम नहीं करता है। (याय!)।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. द्वीपों में टाइमस्टैम्प कैसे समूहित करें (मनमाने ढंग से अंतर के आधार पर)?

  2. Postgresql में पंक्तियों की अधिकतम संख्या से संबंधित बाधा कैसे लिखें?

  3. PostgreSQL क्वेरी में DESC ऑर्डर करते समय NULL मान पहले क्यों आते हैं?

  4. pgDash विकल्प - क्लस्टरकंट्रोल के साथ PostgreSQL डेटाबेस मॉनिटरिंग

  5. MSSQL से PostgreSQL में माइग्रेट करना - आपको क्या पता होना चाहिए