我有一个用户表(1,000s)和一个用户消息表(100,000s)。我想要一种快速获取所有用户及其最新消息的方法。
我目前正在使用的是类似...
SELECT
u.id, u.name,
(
SELECT note FROM msgs
WHERE msgs.uID=u.id
ORDER BY created_date DESC
LIMIT 1
) as note
FROM users u
现在,如果我限制为20个用户,则需要2.5秒... 200个用户需要45秒。
(我已经在msgs.uID和msgs.created_date上有了一个索引。)
我究竟做错了什么?我需要一个更快的查询。
最佳答案
我在发布之前进行了搜索(没有运气),但是发布后在“相关”侧栏中发现了this solution。
SELECT u.id, u.first_name, msgs.note
FROM users u
JOIN (
SELECT MAX(created_date) max_date, user_id
FROM msgs
GROUP BY user_id
) msgs_max ON (msgs_max.user_id = u.id)
JOIN msgs m ON (msgs.created_date = msgs_max.max_date AND u.id = msgs.user_id)
好多了,但在我的桌子上仍然约1.3秒。 MySQL不能这么快吗?