Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एक बहुत छोटी/खाली तालिका में शामिल होने पर, मैं LIMIT का उपयोग करने के बावजूद MySQL एक पूर्ण स्कैन क्यों करता है?

MySQL ऑप्टिमाइज़र पहले जॉइन ऑर्डर/विधि पर फैसला करेगा, और फिर जांच करेगा कि चुने हुए जॉइन ऑर्डर के लिए, इंडेक्स का उपयोग करके सॉर्टिंग से बचना संभव है या नहीं। इस प्रश्न में धीमी क्वेरी के लिए, ऑप्टिमाइज़र ने ब्लॉक-नेस्टेड-लूप (बीएनएल) जॉइन का उपयोग करने का निर्णय लिया है।

बीएनएल आमतौर पर एक इंडेक्स का उपयोग करने से तेज होता है जब तालिकाओं में से एक बहुत छोटा होता है (और कोई सीमा नहीं होती है)।

हालांकि, बीएनएल के साथ, जरूरी नहीं कि पंक्तियाँ पहली तालिका द्वारा दिए गए क्रम में ही आएँ। इसलिए, LIMIT लागू करने से पहले शामिल होने के परिणाम को क्रमबद्ध करने की आवश्यकता है।

आप set optimizer_switch = 'block_nested_loop=off'; द्वारा बीएनएल को बंद कर सकते हैं



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL डेटाबेस में सबसे बड़ी तालिका कैसे खोजें?

  2. RHEL, Rocky और AlmaLinux में MySQL प्रतिकृति को कैसे सेटअप करें?

  3. एसक्यूएल क्या है? एक डेटाबेस क्या है? रिलेशनल डेटाबेस मैनेजमेंट सिस्टम्स (RDBMS) को प्लेन इंग्लिश में समझाया गया।

  4. मैसकल गिनती आवृत्ति

  5. MySQL में मिसिंग डेट्स कैसे भरें?