Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL :obtenir les entrées les plus récentes antérieures à xxx, performances

Vous voulez un index composite sur (objectID, time) :

ALTER TABLE my_table ADD INDEX (objectID, time)

La raison en est que MySQL peut alors récupérer le maximum de time pour chaque objectID directement à partir de l'arborescence d'index ; il peut alors également utiliser le même index en se joignant à nouveau à la table pour trouver le maximum par groupe enregistre en utilisant quelque chose comme votre deuxième requête (mais on devrait joindre à la fois objectID et time —J'aime utiliser une NATURAL JOIN dans des cas comme celui-ci):

SELECT *
FROM   my_table NATURAL JOIN (
  SELECT   objectID, MAX(time) time
  FROM     my_table
  WHERE    time <= 1353143351
  GROUP BY objectID
) t