Jak můžete vidět ve VYSVĚTLENÍ, "book_id" je uveden jako možný klíč. Pokud to MySQL nepoužívá, tak si optimalizátor nemyslí, že by to urychlilo dotaz. Což je pravda, pokud má „prodej_knihy“ pouze 2 řádky a 100 % těchto řádků sdílí stejné „id_knihy“. Btw tomu se říká kardinalita. Jak se vyhnout skenování tabulek (Manuál MySQL)
Zkuste jej vyplnit více řádky a měli byste vidět, že MySQL použije index pro spojení.
Upravit:dotaz
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
...nebude fungovat ani v tomto případě, protože optimalizátor stále rozpoznává, že čtení indexu není optimální, a přepne pořadí tabulek, aby tomu zabránil. Pořadí stolu můžete vynutit pomocí STRAIGHT_JOIN . To je však trochu hack, protože to nutí MySQL provést dotaz způsobem, který není nejlepší.
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