Seperti yang telah Anda tunjukkan, MySQL memiliki dua rencana kueri alternatif untuk kueri dengan ORDER BY ... LIMIT n
:
- Baca semua baris yang memenuhi syarat, urutkan, dan pilih n baris teratas.
- Baca baris dalam urutan yang diurutkan dan hentikan saat n baris kualifikasi telah ditemukan.
Untuk memutuskan opsi mana yang lebih baik, pengoptimal perlu memperkirakan efek pemfilteran dari kondisi WHERE Anda. Ini tidak langsung, terutama untuk kolom yang tidak diindeks, atau untuk kolom di mana nilai-nilai berkorelasi. Dalam kasus Anda, seseorang mungkin harus membaca lebih banyak tabel dalam urutan yang diurutkan untuk menemukan 25 baris pertama yang memenuhi syarat daripada yang diharapkan pengoptimal.
Ada beberapa peningkatan dalam cara LIMIT kueri ditangani, baik di rilis 5.6 yang lebih baru (Anda menjalankan rilis pra-GA!), dan di rilis yang lebih baru (5.7, 8.0). Saya sarankan Anda mencoba meningkatkan ke rilis yang lebih baru, dan lihat apakah ini masih menjadi masalah.
Secara umum, jika Anda ingin memahami keputusan perencana kueri, Anda harus melihat pelacakan pengoptimal untuk kueri.