Saya tidak tahu perbedaan yang Anda lihat di penginstalan sebelumnya dan saat ini, tetapi perilaku server masuk akal.
SELECT test_events.create_time FROM test_events LEFT JOIN test_event_types ON ( test_events.event = test_event_types.id ) ORDER BY test_events.create_time DESC LIMIT 1;
Dalam kueri ini Anda tidak memiliki klausa where tetapi Anda hanya mengambil satu baris. Dan itu setelah mengurutkan berdasarkan create_time
yang kebetulan memiliki index. Dan indeks itu bisa digunakan untuk menyortir. Tapi mari kita lihat kueri kedua.
SELECT test_events.create_time FROM test_events LEFT JOIN test_event_types ON ( test_events.event = test_event_types.id ) WHERE base = 314 ORDER BY test_events.create_time DESC LIMIT 1
Anda tidak memiliki indeks di kolom dasar. Jadi tidak ada indeks yang dapat digunakan untuk itu. Untuk menemukan catatan yang relevan mysql harus melakukan pemindaian tabel. Setelah mengidentifikasi baris yang relevan, mereka perlu diurutkan. Namun dalam kasus ini perencana kueri telah memutuskan bahwa tidak layak menggunakan indeks pada create_time
Saya melihat beberapa masalah dengan pengaturan Anda, yang pertama tidak memiliki dan mengindeks di base
seperti yang sudah disebutkan. Tapi mengapa basis varchar? Anda tampaknya menyimpan bilangan bulat di dalamnya.
ALTER TABLE test_events
ADD PRIMARY KEY (id),
ADD KEY client (client),
ADD KEY event_time (event_time),
ADD KEY manager (manager),
ADD KEY base_id (base_id),
ADD KEY create_time (create_time);
Dan membuat banyak indeks seperti ini tidak masuk akal di mysql. Itu karena mysql hanya dapat menggunakan satu indeks per tabel untuk kueri. Anda akan jauh lebih baik dengan satu atau dua indeks. Mungkin indeks multi kolom.
Saya pikir indeks ideal Anda akan berisi bidang create_time dan event