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

MySQL क्वेरी तालिका में शामिल होने में अनुक्रमणिका का उपयोग नहीं करती है

जैसा कि आप EXPLAIN में देख सकते हैं, "book_id" संभावित कुंजी के रूप में सूचीबद्ध है। यदि MySQL इसका उपयोग नहीं करता है, तो यह सिर्फ इतना है कि अनुकूलक को नहीं लगता कि यह क्वेरी को गति देगा। जो सच है यदि "book_sales" में केवल 2 पंक्तियाँ हैं, और उन पंक्तियों में से 100% समान "book_id" साझा करती हैं। इसे कार्डिनैलिटी बीटीडब्ल्यू कहा जाता है। टेबल स्कैन से कैसे बचें (MySQL मैनुअल)

इसे और पंक्तियों से भरने का प्रयास करें और आप देखेंगे कि MySQL शामिल होने के लिए एक अनुक्रमणिका का उपयोग करेगा।

संपादित करें:क्वेरी

SELECT sale_amount, price
FROM books, book_sales
FORCE INDEX ( book_id ) 
WHERE book_sales.book_id = books.book_id
AND books.author_id =1

... उस स्थिति में भी काम नहीं करेगा क्योंकि ऑप्टिमाइज़र अभी भी यह मानता है कि इंडेक्स को पढ़ना उप-इष्टतम है और ऐसा करने से बचने के लिए टेबल ऑर्डर को स्विच करता है। आप STRAIGHT_JOIN का उपयोग करके तालिका क्रम को बाध्य कर सकते हैं . हालाँकि, यह थोड़ा हैक है क्योंकि यह MySQL को क्वेरी को इस तरह से निष्पादित करने के लिए मजबूर करता है जो सबसे अच्छा नहीं है।

      EXPLAIN
       SELECT sale_amount, price
         FROM books
STRAIGHT_JOIN book_sales FORCE INDEX (book_id) ON book_sales.book_id = books.book_id
        WHERE books.author_id = 1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वर्डप्रेस ने IN() कंडीशन के साथ स्टेटमेंट तैयार किया

  2. MySqlConnectionStringBuilder - प्रमाणपत्रों से कनेक्ट करें

  3. क्रॉन जॉब का उपयोग करके दैनिक डेटाबेस बैकअप

  4. डेटाबेस में डुप्लिकेट स्ट्रिंग खोजें

  5. MySQL में एक Python datetime.datetime ऑब्जेक्ट सम्मिलित करना