Добрый день, у меня есть вопрос, с которым я много борюсь, надеюсь, кто-то уже нашел умное решение этого (я использую MySQL).
У меня есть такая таблица:
Table `log`
----------
id
inserted
message
user_id
Моя цель - выбрать последнюю вставленную запись для пользователя и сделать это быстро. Таблица журналов огромна (около 900 тыс. Записей),
поэтому мой первый подход был:
SELECT * FROM `log`
LEFT JOIN `users` ON `users`.`id` = `log`.`user_id`
WHERE `id` IN
(
SELECT MAX(`id`) FROM `log` GROUP BY `user_id`
)
Но, похоже, он рассчитывает подзапрос для каждой строки (EXPLAIN показывает ЗАВИСИМЫЙ ЗАПРОС). Когда я делю этот запрос на двоих:
SELECT MAX(`id`) FROM `log` GROUP BY `user_id`
и
SELECT * FROM `log`
LEFT JOIN `users` ON `users`.`id` = `log`.`user_id`
WHERE `id` IN (....ids from first query...)
Допустимо бежать. Может ли это быть достигнуто одним запросом?