Potrzebujesz złożonego indeksu nad (objectID, time)
:
ALTER TABLE my_table ADD INDEX (objectID, time)
Powodem tego jest to, że MySQL może wtedy pobrać maksymalny time
dla każdego objectID
bezpośrednio z drzewa indeksowego; może następnie użyć tego samego indeksu przy ponownym dołączaniu do tabeli, aby znaleźć maksymalna grupa
rekordy używające czegoś podobnego do twojego drugiego zapytania (ale należy dołączyć do obu objectID
i time
—Lubię używać NATURAL JOIN
w takich przypadkach):
SELECT *
FROM my_table NATURAL JOIN (
SELECT objectID, MAX(time) time
FROM my_table
WHERE time <= 1353143351
GROUP BY objectID
) t