I have 2 tables:
chats (id, ..., chat_status_id) // (about 28k records)
chat_messages(id, chat_id, send_date, ...) // (about 1 million records)
I need to get chats of certain status with latest message.
This is the select I am using, but it's pretty slow (it works in the end):
SELECT c.*,
p1.*
FROM chats c
JOIN chat_messages p1
ON ( c.id = p1.chat_id )
LEFT OUTER JOIN chat_messages p2
ON ( c.id = p2.chat_id
AND ( p1.send_date < p2.send_date
OR ( p1.send_date = p2.send_date
AND p1.id < p2.id ) ) )
WHERE p2.id IS NULL
AND c.chat_status_id = 1
ORDER BY p1.send_date DESC
I do not know howto optimize it.