美好的一天,我有一个问题,我正在苦苦挣扎,希望有人已经找到了一个巧妙的解决方案(我使用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显示关联查询)。当我分裂这个查询有两个:
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 2010-02-10 08:58:41
请记住,我不是(我的)SQL专家。其他人可能会提出更好的解决方案(+指出此解决方案的问题)是完全可能的。我冒昧地改变了标签,希望能够“引诱”(甚至)更多的专家来解决这个问题;-) – VolkerK 2010-02-10 09:26:43