Như bạn có thể thấy trong EXPLAIN, "book_id" được liệt kê là một khóa khả thi. Nếu MySQL không sử dụng nó, chỉ là trình tối ưu hóa không nghĩ rằng nó sẽ tăng tốc truy vấn. Điều này đúng nếu "book_sales" chỉ có 2 hàng và 100% các hàng đó có chung "book_id". Nó được gọi là cardinality btw. Cách tránh quét bảng (Hướng dẫn sử dụng MySQL)
Hãy thử lấp đầy nó với nhiều hàng hơn và bạn sẽ thấy rằng MySQL sẽ sử dụng một chỉ mục cho phép nối.
Chỉnh sửa:truy vấn
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
... cũng sẽ không hoạt động trong trường hợp đó vì trình tối ưu hóa vẫn nhận ra rằng việc đọc chỉ mục là dưới mức tối ưu và chuyển đổi thứ tự bảng để tránh làm như vậy. Bạn có thể buộc thứ tự bảng bằng cách sử dụng STRAIGHT_JOIN . Tuy nhiên, đây là một vấn đề hơi khó vì nó buộc MySQL phải thực thi truy vấn theo cách không phải là tốt nhất.
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