SQL: 2008 मानक में निर्दिष्ट CTE का अनुकूलन बाड़ व्यवहार (क्वेरी के साथ) है? यदि हां, तो कहां?


23

मैं अक्सर WITHप्रश्नों (कॉमन टेबल एक्सप्रेशन, या CTE) को ऑप्टिमाइज़ेशन फेंस के रूप में देखता हूं , जहां सर्वर को सीटीई प्रश्नों में फिल्टर को नीचे धकेलने की अनुमति नहीं है, CTE के सामान्य एक्सप्रेशंस को बाहर खींचो, आदि का अक्सर दावा किया जाता है। SQL मानकों के लिए आवश्यक व्यवहार होना चाहिए।

Cgs निश्चित रूप से PostgreSQL में एक अनुकूलन बाड़ है ... लेकिन क्या यह मानक द्वारा आवश्यक है, या वास्तव में सिर्फ कार्यान्वयन विस्तार?

उदाहरण के लिए, ये मेलिंग सूची पोस्ट दावा करती हैं या सुझाव देती हैं कि यह मानक है:

एक टिप्पणी में इसका उल्लेख करने के बाद मुझसे पूछा गया कि यह कहाँ निर्दिष्ट है - और SQL: 2008 के एकमात्र मसौदे पर एक नज़र डालने के बाद, मेरे पास इस बात की पहुंच है कि मुझे इसे ढूंढने में ज्यादा तकदीर नहीं है।

मैंने अभी तक मानक का गहनता से अध्ययन नहीं किया है, इसलिए मैं किसी ऐसे व्यक्ति से सुझाव की उम्मीद कर रहा हूं जिसके पास है: क्या पोस्टग्रेक्यूएल में सीटीई के अनुकूलन की बाड़ वास्तव में मानक द्वारा आवश्यक है? और यदि हां, तो यह कहां निर्दिष्ट है? या गलती से Pg मेलिंग सूची पर बयान हैं?

टूडू सूची पर धागा CTE अनुकूलन बाड़ भी देखें ?

जवाबों:


10

मुझे लगता है कि यह एक कार्यान्वयन विवरण है।

सामान्य नियमों में परिभाषित कार्यों के सटीक अनुक्रम को निष्पादित करने के लिए एक अनुरूप कार्यान्वयन की आवश्यकता नहीं होती है, इसका प्रभाव SQL डेटा और स्कीमा पर, मेजबान मापदंडों और होस्ट चर पर, और SQL मापदंडों और SQL चर पर इसके प्रभाव के समान है अनुक्रम। यह शब्द प्रभावी रूप से उन कार्यों पर जोर देने के लिए उपयोग किया जाता है जिनके प्रभाव को अन्य तरीकों से एक कार्यान्वयन द्वारा प्राप्त किया जा सकता है। 1

मुझे लगता है कि एक कार्यान्वयनकर्ता 20 बार, यहां तक ​​कि 20 अलग-अलग तरीकों से एक सामान्य तालिका अभिव्यक्ति का मूल्यांकन कर सकता है, और अभी भी एक अनुरूप कार्यान्वयन है। एकमात्र प्रासंगिक मुद्दा यह है कि क्या "इसका प्रभाव। सामान्य नियमों में परिभाषित कार्यों के अनुक्रम के प्रभाव के समान है।"

[1]। खंड 6.3.3.3, "नियम मूल्यांकन आदेश", SQL 2008 मानक के एक मसौदे में, स्थानीय फ़ाइल नाम 5CD2-01-फ्रेमवर्क-2006-01.pdf, पी। 41 मुझे पता नहीं है कि मुझे यह कहाँ मिला। गूगल को पता चल सकता है।


2
यह गलत अर्थ है - और चूंकि PostgreSQL CTE में साइड इफेक्ट्स या डेटा-संशोधित बयानों के साथ कार्यों के उपयोग की अनुमति देगा, इसलिए इसे ऐसे CTE को बाड़ देना चाहिए। मुझे लगता है कि इसका मतलब है कि यह केवल STABLEया IMMUTABLEकार्यों को कॉल करने वाले CTE को इनलाइन करने के लिए स्वतंत्र है ।
क्रेग रिंगर

मुझे लगता है कि योग्य CTE किसी भी SQL मानकों में अभी तक नहीं हैं , लेकिन मैं सकारात्मक नहीं हूं।
माइक शेरिल 'कैट रिकॉल'

wCTE निश्चित रूप से एक PostgreSQL एक्सटेंशन है। यह कम स्पष्ट है कि डीएमएल को निष्पादित करने वाले फ़ंक्शंस हैं, क्योंकि एसक्यूएल में उपयोगकर्ता परिभाषित फ़ंक्शन हैं, SQL/PSMजो पीजी बिल्कुल समर्थन नहीं करते हैं ...
क्रेग रिंगर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.