Não sei a diferença que você está vendo em suas instalações anteriores e atuais, mas o comportamento dos servidores faz sentido.
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;
Nesta consulta, você não tem uma cláusula where, mas está buscando apenas uma linha. E isso depois de classificar por
create_time
que por acaso tem um índice. E esse índice pode ser usado para classificação. Mas vamos ver a segunda consulta. 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
Você não tem um índice na coluna base. Portanto, nenhum índice pode ser usado nisso. Para encontrar os registros relevantes, o mysql tem que fazer uma varredura na tabela. Tendo identificado as linhas relevantes, elas precisam ser classificadas. Mas, neste caso, o planejador de consultas decidiu que não vale a pena usar o índice em
create_time
Vejo vários problemas com sua configuração, sendo o primeiro não ter e indexar na
base
como já mencionado. Mas por que a base é varchar? Você parece estar armazenando números inteiros nele. 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 fazer vários índices como esse não faz muito sentido no mysql. Isso porque o mysql pode usar apenas um índice por tabela para consultas. Você estaria muito melhor com um ou dois índices. Possivelmente índices de várias colunas.
Acho que seu índice ideal conteria os campos create_time e event