Искате съставен индекс върху (objectID, time)
:
ALTER TABLE my_table ADD INDEX (objectID, time)
Причината за това е, че след това MySQL може да извлече максималното time
за всеки objectID
директно от дървото на индекса; след това може също да използва същия индекс при обединяване срещу таблицата отново, за да намери максимум по групи
записи, използващи нещо като втората ви заявка (но едната трябва да се присъедини към двете objectID
и time
— Обичам да използвам NATURAL JOIN
в случаи като този):
SELECT *
FROM my_table NATURAL JOIN (
SELECT objectID, MAX(time) time
FROM my_table
WHERE time <= 1353143351
GROUP BY objectID
) t