Non so la differenza che stai vedendo nelle tue installazioni precedenti e attuali, ma il comportamento dei server ha senso.
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;
In questa query non hai una clausola where ma stai recuperando solo una riga. E questo dopo l'ordinamento per create_time
che ha un indice. E quell'indice può essere utilizzato per l'ordinamento. Ma vediamo la seconda query.
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
Non hai un indice nella colonna di base. Quindi nessun indice può essere utilizzato su questo. Per trovare i record pertinenti mysql deve eseguire una scansione della tabella. Dopo aver identificato le righe pertinenti, è necessario ordinarle. Ma in questo caso il pianificatore di query ha deciso che non vale la pena utilizzare l'indice su create_time
Vedo diversi problemi con la tua configurazione, il primo è non avere e indicizzare su base
come già detto. Ma perché la base varchar? Sembra che tu stia memorizzando numeri interi al suo interno.
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);
E creare più indici come questo non ha molto senso in MySQL. Questo perché mysql può utilizzare solo un indice per tabella per le query. Saresti molto meglio con uno o due indici. Possibilmente indici a più colonne.
Penso che il tuo indice ideale conterrebbe sia i campi create_time che quelli dell'evento