MySQL, साथ ही SQL Server को छोड़कर अन्य सभी सिस्टम, मिलान मूल्य मिलते ही वापस लौटने के लिए LEFT JOIN
/IS NULL
को ऑप्टिमाइज़ करने में सक्षम FALSE
है, और यह एकमात्र सिस्टम है जो इस व्यवहार को दस्तावेज करने के लिए देखभाल करता है। […] चूंकि MySQL एल्गोरिदम का उपयोग करने HASH
और MERGE
इसमें शामिल होने में सक्षम नहीं है, केवल ANTI JOIN
यह सक्षम हैNESTED LOOPS ANTI JOIN
[...]
अनिवार्य रूप से, [ NOT IN
] ठीक वही योजना है जो LEFT JOIN
/ IS NULL
उपयोग करता है, इस तथ्य के बावजूद कि इन योजनाओं को कोड की विभिन्न शाखाओं द्वारा निष्पादित किया जाता है और वे परिणामों के परिणामों में अलग दिखते हैं EXPLAIN
। एल्गोरिदम वास्तव में समान हैं और क्वेरी एक ही समय में पूरी होती हैं।
[...]
[उपयोग करते समय प्रदर्शन ड्रॉप NOT EXISTS
] का सटीक कारण बताना कठिन है , क्योंकि यह ड्रॉप रैखिक है और डेटा वितरण, दोनों तालिकाओं में मूल्यों की संख्या आदि पर निर्भर नहीं करता है, जब तक कि दोनों क्षेत्रों को अनुक्रमित नहीं किया जाता है। चूंकि MySQL में कोड के तीन टुकड़े होते हैं जो आवश्यक रूप से एक काम करते हैं, यह संभव है कि कोड के लिए जिम्मेदार EXISTS
किसी तरह की अतिरिक्त जांच करता है जो अतिरिक्त समय लेता है।
[...]
MySQL एक तरह का करने के लिए सभी तीन तरीकों का अनुकूलन कर सकता है NESTED LOOPS ANTI JOIN
। […] हालाँकि, ये तीन विधियाँ तीन अलग-अलग योजनाएँ उत्पन्न करती हैं जिन्हें तीन अलग-अलग कोड द्वारा निष्पादित किया जाता है। कोड, जो EXISTS
विधेय को निष्पादित करता है, लगभग 30% कम कुशल है […]
यही कारण है कि MySQL में लापता मूल्यों की खोज करने का सबसे अच्छा तरीका एक LEFT JOIN
/ IS NULL
या के NOT IN
बजाय का उपयोग कर रहा है NOT EXISTS
।
(emphases जोड़ा गया)