Begitulah caranya. Bersabarlah sebentar...
Pengoptimal ingin menggunakan INDEX, dalam hal ini ACTI_DATE_I. Tapi itu tidak ingin menggunakannya jika itu akan lebih lambat.
Paket A:Gunakan indeks.
- Mencapai indeks terstruktur BTree di bagian akhir (karena DESC)
- Pindai mundur
- Untuk setiap baris dalam indeks, cari baris yang sesuai dalam data. Catatan:Indeks memiliki (ACTIVITY_DATE, ACTIVITY_ID) karena PRIMARY KEY secara implisit ditambahkan ke secondary key mana pun. Untuk menjangkau "data" menggunakan PK (ACTIVITY_ID) adalah pencarian BTree lainnya, berpotensi acak. Oleh karena itu, berpotensi lambat. (Tapi tidak terlalu lambat dalam kasus Anda.)
- Ini berhenti setelah LIMIT baris.
Paket B:Abaikan tabel
- Pindai tabel, buat tabel tmp. (Kemungkinan ada dalam ingatan.)
- Urutkan tabel tmp
- Kupas LIMIT baris.
Dalam kasus Anda (96 -- 1% dari 10K) mengejutkan bahwa ia memilih pemindaian tabel. Biasanya, batasnya sekitar 10% -30% dari jumlah baris dalam tabel.
ANALYZE TABLE
harus telah menyebabkan penghitungan ulang statistik, yang bisa telah meyakinkannya untuk mengikuti Rencana lainnya.
Versi MySQL apa yang Anda gunakan? (Tidak, saya tidak tahu ada perubahan di area ini.)
Satu hal yang dapat Anda coba:OPTIMIZE TABLE ACTIVITIES;
Itu akan membangun kembali tabel, sehingga mengemas ulang blok dan mengarah ke berpotensi statistik yang berbeda. Jika itu membantu, saya ingin mengetahuinya -- karena saya biasanya mengatakan "Mengoptimalkan tabel tidak berguna".