sql >> Base de Datos >  >> RDS >> Mysql

MySQL:obtenga las entradas más recientes anteriores a xxx, rendimiento

Quiere un índice compuesto sobre (objectID, time) :

ALTER TABLE my_table ADD INDEX (objectID, time)

La razón de esto es que MySQL puede recuperar el time máximo para cada objectID directamente desde el árbol de índices; luego también puede usar el mismo índice para unirse a la tabla nuevamente para encontrar el máximo por grupo registros usando algo como su segunda consulta (pero uno debe unirse en ambos objectID y time —Me gusta usar NATURAL JOIN en casos como este):

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