Je ne connais pas la différence que vous voyez dans vos installations précédentes et actuelles, mais le comportement des serveurs est logique.
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;
Dans cette requête, vous n'avez pas de clause where mais vous ne récupérez qu'une seule ligne. Et c'est après le tri par create_time
qui se trouve avoir un index. Et cet index peut être utilisé pour le tri. Mais voyons la seconde requête.
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
Vous n'avez pas d'index sur la colonne de base. Donc, aucun index ne peut être utilisé à ce sujet. Pour trouver les enregistrements pertinents, mysql doit effectuer une analyse de la table. Après avoir identifié les lignes pertinentes, elles doivent être triées. Mais dans ce cas, le planificateur de requêtes a décidé que cela ne valait tout simplement pas la peine d'utiliser l'index sur create_time
Je vois plusieurs problèmes avec votre configuration, le premier étant de ne pas avoir et d'indexer sur base
comme déjà mentionné. Mais pourquoi base varchar ? Vous semblez y stocker des nombres entiers.
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);
Et créer plusieurs index comme celui-ci n'a pas beaucoup de sens dans mysql. C'est parce que mysql ne peut utiliser qu'un seul index par table pour les requêtes. Vous seriez bien mieux avec un ou deux index. Peut-être des index multi-colonnes.
Je pense que votre index idéal contiendrait à la fois les champs create_time et event