Saya punya permintaan dengan klausa ORDER BY yang menggunakan kolom yang merupakan kolom terakhir pada indeks yang sedang digunakan dalam klausa WHERE, pada dasarnya dari bentuk:
SELECT
cols
FROM
tables
WHERE
col_1 = x
AND col_2 = y
AND col_3 = z
ORDER BY col_4
dan indeks dibuat pada kolom (col_1, col_2, col_3, col_4) dalam urutan itu.
Ketika saya memprofilkan kueri, lebih dari 99% waktu dihabiskan dalam kondisi "Menyortir hasil". col_4 adalah kolom stempel waktu jika ada bedanya. Saya mengerti bahwa ORDER BY hanya dapat menggunakan indeks dalam keadaan tertentu, tapi saya masih agak bingung kapan tepatnya pengoptimal melakukannya.
Anda gunakan
EXPLAIN
pada permintaan Anda (explain select-or-whatever-your-query-is
).possible_keys
perlihatkan yang bisa digunakan,key
yang benar-benar digunakan.sumber
explain format=json select ...
bahkan lebih kuat. Itu termasukused_key_parts
, yang memberi tahu Anda apakah kunci komposit digunakan sebagian atau seluruhnya, danindex_condition
akan memberi tahu Anda bagian mana dari kueri yang bertanggung jawab atas indeks mana.