Bạn muốn có một chỉ mục tổng hợp trên (objectID, time)
:
ALTER TABLE my_table ADD INDEX (objectID, time)
Lý do cho điều này là sau đó MySQL có thể truy xuất time
tối đa cho mỗi objectID
trực tiếp từ cây chỉ mục; sau đó nó cũng có thể sử dụng cùng một chỉ mục khi kết hợp lại với bảng để tìm tối đa theo nhóm
các bản ghi bằng cách sử dụng một cái gì đó giống như truy vấn thứ hai của bạn (nhưng một cái nên kết hợp trên cả objectID
và time
—Tôi thích sử dụng NATURAL JOIN
trong những trường hợp như thế này):
SELECT *
FROM my_table NATURAL JOIN (
SELECT objectID, MAX(time) time
FROM my_table
WHERE time <= 1353143351
GROUP BY objectID
) t