我有一个查询在一个大约有10万条记录的表中,它运行得非常缓慢(3-4秒),当我去掉group时,速度就快多了(不到0.5秒)。我很困惑该怎么修复这个问题:
SELECT msg.id,
msg.thread_id,
msg.senderid,
msg.recipientid,
from_user.username AS from_name,
to_user.username AS to_name
FROM msgtable AS msg
LEFT JOIN usertable AS from_user ON msg.senderid = from_user.id
LEFT JOIN usertabe AS to_user ON msg.recipientid = to_user.id
GROUP BY msg.thread_id
ORDER BY msg.id desc
msgtable 在 thread_id
、id
、senderid
和 recipientid
上都有索引。
explain 返回:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE msg ALL NULL NULL NULL NULL 162346 Using temporary; Using filesort
1 SIMPLE from_user eq_ref PRIMARY PRIMARY 4 db.msg.senderid 1
1 SIMPLE to_user eq_ref PRIMARY PRIMARY 4 db.msg.recipientid 1
有什么方法可以加快速度,同时返回相同的结果(每个主题有多条消息,我想在此查询中仅返回一条消息)。
提前致谢。
usertable
的索引呢?您能否运行EXPLAIN <query>
并发布结果? - Frankie