[英]Most recent related entries from another table
I've got a table of users (1,000s) and a table of user messages (100,000s). 我有一个用户表(1,000s)和一个用户消息表(100,000s)。 I want a fast way of getting all users and their most recent message.
我想要一种快速获取所有用户及其最新消息的方法。
What I'm currently using is something like... 我目前正在使用的是类似...
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
Right now if I limit that to 20 users, it takes 2.5s ... 200 users takes 45s. 现在,如果我限制为20个用户,则需要2.5秒... 200个用户需要45秒。
(I already have an INDEX on msgs.uID and msgs.created_date.) (我已经在msgs.uID和msgs.created_date上有了一个索引。)
What am I doing wrong? 我究竟做错了什么? I need a much faster query.
我需要一个更快的查询。
I searched before posting (with no luck), but found this solution in the "related" sidebar just after posting. 我在发布之前进行了搜索(没有运气),但是发布后在“相关”侧栏中找到了该解决方案 。
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)
Considerably better, but still ~1.3s on my tables. 好多了,但在我的桌子上仍然约1.3秒。 Can't MySQL do this much faster?
MySQL不能这么快吗?
select users.*, msgs2.* from users inner join ( select msgs.* from msgs inner join ( select max(created_date) as dt, user_id from msgs group by user_id ) last_dt on msgs.user_id = last_dt.user_id and msgs.created_date = last_dt.dt ) msgs2 on users.id = msgs2.user_id
Try this, I am sorry if this may be has some syntax error, or may be also works slow, I write this query directly, without any test. 试试这个,很抱歉,如果这可能有一些语法错误,或者也可能工作缓慢,我直接编写了此查询,没有进行任何测试。
Just try. 你试一试。
Solution with just two joins 只需两个联接的解决方案
SELECT u.id,u.name,msgs_max.note FROM users u JOIN
(SELECT m1.uID, m1.note FROM msgs m1 LEFT JOIN msgs m2
ON (m1.created_date < m2.created_date
AND m1.uID = m2.uID)
WHERE m2.id IS NULL) msgs_max
ON u.uID=msg_max.uID
Reference: https://stackoverflow.com/a/123481/2180715 参考: https : //stackoverflow.com/a/123481/2180715
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.