Tulis kueri dengan cara ini:
SELECT *
FROM orders
JOIN users ON orders.id_user = users.id
WHERE orders.status='new'
Jangan tentukan indeks apa yang akan digunakan.
Dimulai dengan WHERE klausa, sepertinya ini mungkin berguna:INDEX(status) . Namun karena "status" terdengar seperti "bendera" dengan kardinalitas rendah, pengoptimal mungkin memutuskan untuk mengabaikan indeks dan hanya melakukan pemindaian tabel. Tidak apa-apa. Tidak apa-apa karena lebih cepat melakukan pemindaian tabel daripada memantul antara indeks dan data, ketika indeks tidak terlalu selektif. Bagaimanapun, serahkan keputusan pada Pengoptimal.
Sekarang berurusan dengan orders , perlu JOIN kepada users . Satu-satunya cara untuk melakukannya adalah dengan memiliki indeks di id . Nama itu ("id") menyiratkan bahwa itu mungkin PRIMARY KEY , Apakah itu? (Harap berikan SHOW CREATE TABLE .)
Kueri lain yang Anda sebutkan harus ditulis
SELECT * FROM users WHERE id=33
Dan, seperti yang telah dibahas, indeks (PRIMARY KEY ?) pada id adalah hal yang benar.
Tidak ada keuntungan (untuk SELECTs yang diberikan , setidaknya) untuk INDEX(status, id_user) . Pilihan Anda mencakup semua kolom (* ); itu hanya mengambil id_user , maka indeks semacam itu akan "menutupi", dan memiliki beberapa keuntungan.