Som du kan se i EXPLAIN, är "book_id" listad som en möjlig nyckel. Om MySQL inte använder det är det bara det att optimeraren inte tror att det skulle påskynda frågan. Vilket är sant om "book_sales" bara har 2 rader och 100 % av dessa rader delar samma "book_id". Det kallas kardinalitet btw. Hur man undviker tabellsökningar (MySQL-manual)
Prova att fylla den med fler rader och du bör se att MySQL kommer att använda ett index för sammanfogningen.
Redigera:frågan
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
...kommer inte heller att fungera i så fall eftersom optimeraren fortfarande känner igen att läsningen av indexet är suboptimalt och ändrar tabellordningen för att undvika att göra det. Du kan tvinga fram tabellordningen genom att använda STRAIGHT_JOIN . Detta är dock lite av ett hack eftersom det tvingar MySQL att köra frågan på ett sätt som inte är det bästa.
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