【发布时间】:2011-01-15 00:11:15
【问题描述】:
美好的一天,我有一个一直在苦苦挣扎的问题,希望有人已经找到了一个聪明的解决方案(我使用 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...)
运行是可以接受的。这可以通过一个查询来实现吗?
【问题讨论】:
标签: sql mysql query-optimization grouping groupwise-maximum