अगर मैं निम्नलिखित खिलौना क्वेरीक्या पोस्टग्रेस्क्ल plpgsql/sql समर्थन खंड में लघु सर्किट का समर्थन करता है?
SELECT *
FROM my_tables
WHERE my_id in (
SELECT my_other_id
FROM my_other_tables
) AND some_slow_func(arg) BETWEEN 1 AND 2;
चाहेंगे कहां खंड शॉर्ट सर्किट में पहली शर्त दूसरी शर्त जो एक जटिल रन समय होता?
मैं कुछ एसक्यूएल वास्तव में plpgsql में एक के लिए लूप का हिस्सा है उस पर काम कर रहा हूँ, और मैं some_slow_func साथ के लिए लूप के दायरे के भीतर सभी रिकॉर्ड से अधिक पुनरावृत्तियों कि my_other_tables में मौजूद हैं, और फिर परीक्षण कर सकता है ()। लेकिन अगर मैं एसक्यूएल का समर्थन करता हूं तो मुझे उत्सुकता है, या plpgsql लघु सर्किटिंग का समर्थन करता है।
कुछ अनुसंधान: मैं Postgres मेलिंग सूची में देखा और पाया सामान्य रूप में यह कह एसक्यूएल लघु सर्किटिंग का समर्थन नहीं करता:
http://www.postgresql.org/message-id/[email protected]om
लेकिन प्रतिक्रियाओं में से एक का कहना है कि आदेश के माध्यम से लागू किया जा सकता है subselects। मुझे बिल्कुल यकीन नहीं है कि वह किस बारे में बात कर रहा है। मुझे पता है कि उप-चयन क्या है, लेकिन मुझे यकीन नहीं है कि आदेश कैसे लागू किया जाएगा? क्या कोई मेरे लिए यह स्पष्ट कर सकता है?
मुझे नहीं लगता कि शॉर्ट सर्किटिंग प्रासंगिक है; एसक्यूएल को सेट-उन्मुख माना जाना चाहिए, और नतीजा मूल्यांकन के आदेश पर निर्भर नहीं होना चाहिए। इस * के लिए एक एक्सपेंशन * दो उप-श्रेणियों का एक यूनियन हो सकता है, दोनों एलआईटी के साथ-साथ पूरी तरह से क्वेरी पर अतिरिक्त LIMIT भी हो सकता है। लेकिन एलआईटी वैसे भी सीमा रेखा है ... मूल्यांकन के साइड इफेक्ट्स वास्तव में रिलेशनशिप आरएसबीएमएस (शायद लैटरल को छोड़कर) में संभव नहीं होना चाहिए।संक्षेप में: मूल्यांकन का क्रम केवल प्रदर्शन को प्रभावित करता है, न कि परिणामों की शुद्धता (आईएमएचओ)। यही कारण है कि हमें योजनाकार के मूल्यांकन का आदेश छोड़ देना चाहिए। – wildplasser