Laporan EXPLAIN diketahui sulit untuk ditafsirkan. Mereka telah membebani terlalu banyak informasi ke dalam beberapa bidang. Anda dapat mencoba
type: index
menunjukkan sedang melakukan index-scan , yang berarti mengunjungi setiap entri di index.
Ini mengunjungi jumlah entri yang sama dengan pemindaian tabel, kecuali terhadap indeks sekunder, bukan indeks berkerumun (utama).
Ketika kita melihat type: index
, EXPLAIN menunjukkan possible_keys: NULL
yang berarti tidak dapat menggunakan indeks apa pun untuk mencari secara efisien. Tapi itu juga menunjukkan key: add_time
yang berarti indeks yang digunakan untuk pemindaian indeks adalah add_time
.
Pemindaian indeks disebabkan oleh fakta bahwa MySQL tidak dapat mengoptimalkan ekspresi atau panggilan fungsi dengan sendirinya. Misalnya, jika Anda mencoba mencari tanggal dengan bulan tertentu, Anda dapat mencari month(add_time) = 4
tetapi itu tidak akan menggunakan indeks pada add_time karena tanggal dengan bulan itu tersebar di seluruh indeks, tidak semua dikelompokkan bersama.
Anda mungkin tahu bahwa date(add_time)
harus dapat dicari oleh indeks, tetapi MySQL tidak membuat kesimpulan itu. MySQL hanya melihat bahwa Anda menggunakan suatu fungsi, dan bahkan tidak mencoba menggunakan indeks.
Itulah mengapa MySQL 5.7 memperkenalkan kolom yang dihasilkan untuk memungkinkan kami mengindeks ekspresi, dan MySQL 8.0 membuatnya lebih baik lagi dengan mengizinkan indeks yang ditentukan untuk ekspresi tanpa mengharuskan kita untuk mendefinisikan kolom yang dihasilkan terlebih dahulu.