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