Anda memerlukan indeks gabungan pada tabel persimpangan:
ALTER TABLE instruments_tools ADD KEY (id_instrument, id_tool);
Urutan kolom dalam indeks itu penting!
Apa yang Anda harapkan adalah bahwa penggabungan akan dimulai dengan tabel instrumen, kemudian mencari entri indeks yang cocok dalam indeks gabungan berdasarkan id_instrument. Kemudian setelah menemukan entri indeks itu, ia memiliki id_tool terkait secara gratis. Jadi tidak harus membaca tabel instrument_tools sama sekali, cukup membaca entri indeks saja. Itu akan memberikan komentar "Menggunakan indeks" di EXPLAIN Anda untuk tabel instrument_tools.
Itu akan membantu, tetapi Anda tidak dapat menghindari tabel temp dan pengurutan file, karena kolom yang Anda kelompokkan dan urutkan tidak dapat menggunakan indeks.
Anda dapat mencoba membuat MySQL menghindari penulisan tabel temp ke disk dengan meningkatkan ukuran memori yang dapat digunakan untuk tabel sementara:
mysql> SET GLOBAL tmp_table_size = 256*1024*1024; -- 256MB
mysql> SET GLOBAL max_heap_table_size = 256*1024*1024; -- 256MB
Angka itu hanya sebagai contoh. Saya tidak tahu seberapa besar tabel temp dalam kasus Anda.