मैं एक oracle DB पर हूँ। कहते हैं, मेरा एक दृष्टिकोण है कि तीन तालिकाओं से जुड़ता है। दृश्य के दो क्षेत्र हैं। प्रत्येक फ़ील्ड को केवल दो तीन तालिकाओं के डेटा की आवश्यकता होती है।
यदि मैं दृश्य को क्वेरी करता हूं और केवल एक फ़ील्ड लौटाता हूं, तो क्या दृश्य अभी भी तीन तालिकाओं में जुड़ता है या केवल दो तालिकाओं के लिए जो क्षेत्र की गणना करने की आवश्यकता है?
उत्तर:
जवाब के लिए 2 № 1आम तौर पर इसे तीन तालिकाओं को मारना होगा। विचार करें
SELECT A.VAL, B.VAL, C.VAL FROM A JOIN B ON A.ID = B.ID JOIN C ON A.ID = C.ID
यह संभव है कि "ए" में एक एकल आई.डी.शून्य, 1 या एकाधिक मैच बी या सी में। यदि टेबल "C" खाली था, तो दृश्य कभी भी वापस नहीं आएगा, इसलिए यहां तक कि A.VAL या B.VAL को भी उद्धृत करते हुए, यह देखना होगा कि क्या कोई है "सी" में संगत पंक्ति।
अपवाद तब है, जब लागू किया गया हैसंदर्भात्मक अखंडता बाधा, ऑप्टिमाइज़र जानता है कि "बी" में एक पंक्ति हमेशा "ए" में एक मूल पंक्ति होगी। उस स्थिति में, B.VAL के चयन को वास्तव में "ए" में मूल पंक्ति के अस्तित्व की जांच करने की आवश्यकता नहीं होगी। इसके द्वारा यह प्रदर्शित किया जाता है लेख
जवाब के लिए 0 № 2
यह संभावना इस बात पर निर्भर करती है कि किस प्रकार के जुड़ने का उपयोग किया जा रहा है। यदि वे सभी आंतरिक जोड़ हैं, तो निश्चित रूप से सभी तीन तालिकाओं की जांच करने की आवश्यकता होगी।
जवाब के लिए 0 № 3
सामान्य तौर पर, डेटाबेस इंजन यह सुनिश्चित करने के लिए सभी तीन तालिकाओं को मिलाएगा कि उसे सही उत्तर मिल सके।
ओरेकल कभी-कभी उन तालिकाओं में से एक को अलग करेगा जहां यह परिणाम नहीं बदलता है।
यह किया जा सकता है अगर: -
तालिका को एकीभूत करने के लिए एक विदेशी कुंजी बाधा है (यानी तालिका में एक पंक्ति पाया जा सकता है गारंटी)
तालिका अन्यथा अप्रयुक्त है। यानी जहां से क्लॉज आदि में चयन नहीं किया गया है।