Você quer um índice composto sobre
(objectID, time)
:ALTER TABLE my_table ADD INDEX (objectID, time)
A razão para isso é que o MySQL pode então recuperar o máximo de
time
para cada objectID
diretamente da árvore de índice; ele também pode usar o mesmo índice ao juntar-se à tabela novamente para encontrar o máximo de grupo
registros usando algo como sua segunda consulta (mas deve-se juntar em ambos objectID
e time
—Eu gosto de usar um NATURAL JOIN
em casos como este):SELECT *
FROM my_table NATURAL JOIN (
SELECT objectID, MAX(time) time
FROM my_table
WHERE time <= 1353143351
GROUP BY objectID
) t