我在一个大约有 10 万条记录的表中有这个查询,它运行速度很慢(3-4 秒),当我取出组时它要快得多(不到 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
。
解释回报:
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
任何想法如何在返回相同结果的同时加快速度(每个线程有多条消息,我想在此查询中每个线程只返回一条消息)。
提前致谢。