美好的一天,我有一个我一直在努力解决的问题,希望有人已经找到了一个聪明的解决方案(我使用 MySQL)。
我有这样的表:
Table `log`
----------
id
inserted
message
user_id
我的目标是为用户选择最后插入的记录并使其快速。日志表很大(大约 90 万条记录),所以我的第一个方法是:
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 显示 DEPENDENT 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...)
跑步是可以接受的。这可以通过一个查询来实现吗?