मैं एक ऐसी स्क्रिप्ट लिख रहा हूं जो एक क्वेरी के आधार पर एक रिपोर्ट उत्पन्न करता है जो कई तालिकाओं का एक साथ जुड़ता है। लिपि में इनपुट में से एक रिपोर्ट रिपोर्ट पर आवश्यक फ़ील्ड की एक सूची होगी। अनुरोध किए गए फ़ील्ड के आधार पर, कुछ तालिकाओं की आवश्यकता नहीं हो सकती है। मेरा सवाल है: क्या इसमें शामिल होने के लिए एक [महत्वपूर्ण] प्रदर्शन जुर्माना है जब इसे किसी चयन या कहां खंड में संदर्भित नहीं किया जाता है?अप्रयुक्त जॉइन के लिए प्रदर्शन दंड
SELECT
`Authors`.`lastName`
FROM
`Authors`
JOIN
`Books`
ON `Authors`.`id` = `Books`.`authorId`
WHERE
`Authors`.`id` = 1
:
mysql> SELECT * FROM `Books`;
+----------------------+----------+
| title | authorId |
+----------------------+----------+
| Animal Farm | 3 |
| Brave New World | 2 |
| Fahrenheit 451 | 1 |
| Nineteen Eighty-Four | 3 |
+----------------------+----------+
mysql> SELECT * FROM `Authors`;
+----+----------+-----------+
| id | lastName | firstName |
+----+----------+-----------+
| 1 | Bradbury | Ray |
| 2 | Huxley | Aldous |
| 3 | Orwell | George |
+----+----------+-----------+
SELECT
`Authors`.`lastName`
FROM
`Authors`
WHERE
`Authors`.`id` = 1
मात करता है:
निम्न तालिकाओं पर विचार करें?
ऐसा लगता है कि MySQL को पूरी तरह से जॉइन को अनदेखा करना चाहिए, क्योंकि तालिका को चयन या कहां खंड में संदर्भित नहीं किया गया है। लेकिन किसी भी तरह मुझे संदेह है कि यह मामला है। बेशक, यह वास्तव में एक मूल उदाहरण है। शामिल वास्तविक डेटा अधिक जटिल होगा।
और वास्तव में, यह एक बहुत बड़ा सौदा नहीं है ... मुझे सिर्फ यह जानने की ज़रूरत है कि मेरी स्क्रिप्ट को शामिल होने के बारे में "स्मार्ट" होना चाहिए, और केवल उनको शामिल करें यदि अनुरोध किए गए फ़ील्ड उन पर भरोसा करेंगे।
आपके द्वारा सूचीबद्ध किए गए मामले वास्तव में अलग-अलग परिणाम लौटा सकते हैं। जब आप टेबल में शामिल हो जाते हैं तो लौटाए गए परिणाम सभी लेखकों नहीं होंगे, वे सभी लेखकों होंगे जिन्होंने एक पुस्तक लिखी है। –
ओह, अच्छा बिंदु ... क्या होगा यदि यह बाएं शामिल हो? फिर यह पूरी तरह से अनावश्यक है और एक ही परिणाम देता है। उस स्थिति में, मुझे आश्चर्य है कि इसमें शामिल होने के लिए प्रदर्शन लाभ होगा या नहीं? –
ओह, लेकिन बाएं जुड़ने के साथ भी, डुप्लिकेट की संभावना होगी (इस मामले में, यदि WHERE क्लॉज था: 'लेखक'। 'id' = 3)। तो MySQL को हमेशा यह देखना होगा कि उस तालिका में पहले क्या है ... तो यह हमेशा प्रदर्शन में कम से कम एक बूंद होने जा रहा है। समझ गया। धन्यवाद! –