У меня есть этот запрос в таблице, содержащей около 100 тыс. Записей, он выполняется довольно медленно (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
Любые идеи, как ускорить это, возвращая один и тот же результат (в каждом потоке несколько сообщений, я хочу вернуть только одно сообщение в потоке в этом запросе).
заранее спасибо.