Sie möchten einen zusammengesetzten Index über (objectID, time)
:
ALTER TABLE my_table ADD INDEX (objectID, time)
Der Grund dafür ist, dass MySQL dann die maximale time
abrufen kann für jede objectID
direkt aus dem Indexbaum; es kann dann auch denselben Index verwenden, um erneut mit der Tabelle zu verbinden, um die gruppenweises Maximum
Datensätze, die so etwas wie Ihre zweite Abfrage verwenden (aber man sollte beide objectID
verbinden und time
—Ich verwende gerne einen NATURAL JOIN
in solchen Fällen):
SELECT *
FROM my_table NATURAL JOIN (
SELECT objectID, MAX(time) time
FROM my_table
WHERE time <= 1353143351
GROUP BY objectID
) t