Jeg ved ikke, hvilken forskel du ser i dine tidligere og nuværende installationer, men serverens adfærd giver mening.
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;
I denne forespørgsel har du ikke en where-klausul, men du henter kun én række. Og det er efter sortering efter create_time
som tilfældigvis har et indeks. Og det indeks kan bruges til sortering. Men lad os se den anden forespørgsel.
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
Du har ikke et indeks i basiskolonnen. Så der kan ikke bruges noget indeks på det. For at finde de relevante poster skal mysql lave en tabelscanning. Efter at have identificeret de relevante rækker, skal de sorteres. Men i dette tilfælde har forespørgselsplanlæggeren besluttet, at det bare ikke er det værd at bruge indekset på create_time
Jeg kan se flere problemer med din opsætning, den første er ikke at have og indeksere på base
som allerede nævnt. Men hvorfor er base varchar? Du ser ud til at gemme heltal i den.
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);
Og at lave flere indekser som dette giver ikke meget mening i mysql. Det er fordi mysql kun kan bruge ét indeks pr. tabel til forespørgsler. Du ville være langt bedre stillet med et eller to indekser. Muligvis indekser med flere kolonner.
Jeg tror, dit ideelle indeks ville indeholde både create_time og begivenhedsfelter