Добрый день, у меня есть вопрос, с которым я много борюсь, надеюсь, что кто-то уже нашел умное решение для этого (я использую MySQL).Выберите только самые новые записи из таблицы и сделайте это FAST, как?
У меня есть таблица вроде этого:
Table `log`
----------
id
inserted
message
user_id
Моя цель состоит в том, чтобы выбрать последнюю вставленную запись для пользователя, и сделать это быстро. Вход стол огромный (около 900k записей), поэтому мой первый подход:
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 показывает Зависимые QUERY). Когда я разделил этот вопрос на две части:
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...)
Это приемлемо для запуска. Может ли это быть достигнуто одним запросом?
Он работает! Большое спасибо! Это задумано в SQL-способе! – artvolk
Имейте в виду, что я не эксперт (Мой) SQL. Вполне возможно, что кто-то еще представит гораздо лучшее решение (+ указывает на проблемы с этим решением). Я взял на себя смелость изменить теги в надежде «заманить» (даже) больше экспертов на эти вопросы ;-) – VolkerK