Jag vet inte vilken skillnad du ser i dina tidigare och nuvarande installationer men serverns beteende är vettigt.
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 den här frågan har du ingen where-klausul utan du hämtar bara en rad. Och det är efter sortering efter create_time
som råkar ha ett index. Och det indexet kan användas för sortering. Men låt oss se den andra frågan.
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 inget index i baskolumnen. Så inget index kan användas på det. För att hitta de relevanta posterna måste mysql göra en tabellskanning. Efter att ha identifierat de relevanta raderna måste de sorteras. Men i det här fallet har frågeplaneraren beslutat att det helt enkelt inte är värt det att använda indexet på create_time
Jag ser flera problem med din installation, det första är att inte ha och indexera på base
som redan nämnts. Men varför är bas varchar? Du verkar lagra 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);
Och att göra flera index som detta är inte mycket meningsfullt i mysql. Det beror på att mysql bara kan använda ett index per tabell för frågor. Du skulle vara mycket bättre med ett eller två index. Eventuellt index med flera kolumner.
Jag tror att ditt ideala index skulle innehålla både create_time och händelsefält