Seperti yang Anda lihat di EXPLAIN, "book_id" terdaftar sebagai kemungkinan kunci. Jika MySQL tidak menggunakannya, hanya saja pengoptimal tidak berpikir itu akan mempercepat kueri. Yang benar jika "book_sales" hanya memiliki 2 baris, dan 100% dari baris tersebut memiliki "book_id" yang sama. Ini disebut kardinalitas btw. Cara Menghindari Pemindaian Tabel (Manual MySQL)
Coba isi dengan lebih banyak baris dan Anda akan melihat bahwa MySQL akan menggunakan indeks untuk bergabung.
Sunting:kueri
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
... tidak akan berfungsi baik dalam kasus itu karena pengoptimal masih mengenali bahwa membaca indeks adalah suboptimal dan mengganti urutan tabel untuk menghindari melakukannya. Anda dapat memaksa urutan tabel dengan menggunakan STRAIGHT_JOIN . Namun, ini sedikit peretasan karena memaksa MySQL untuk mengeksekusi kueri dengan cara yang bukan yang terbaik.
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