जैसा कि आप 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