Ik weet niet welk verschil je ziet in je vorige en huidige installaties, maar het gedrag van de server is logisch.
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 deze query heb je geen waar-clausule, maar je haalt slechts één rij op. En dat is na sorteren op create_time
die toevallig een index heeft. En die index kan worden gebruikt om te sorteren. Maar laten we de tweede vraag eens bekijken.
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
U heeft geen index in de basiskolom. Daar kan dus geen index op worden gebruikt. Om de relevante records te vinden, moet mysql een tabelscan uitvoeren. Nadat de relevante rijen zijn geïdentificeerd, moeten ze worden gesorteerd. Maar in dit geval heeft de queryplanner besloten dat het gewoon niet de moeite waard is om de index op create_time
te gebruiken
Ik zie verschillende problemen met je setup, de eerste is dat je geen en index hebt op base
zoals al genoemd. Maar waarom is base varchar? Je lijkt er gehele getallen in op te slaan.
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);
En het maken van meerdere indexen zoals deze heeft niet veel zin in mysql. Dat komt omdat mysql slechts één index per tabel kan gebruiken voor query's. Je zou veel beter af zijn met een of twee indexen. Mogelijk indexen met meerdere kolommen.
Ik denk dat je ideale index zowel create_time- als eventvelden zou bevatten