Я предполагаю, что chat.id проиндексирован.Если нет, конечно, вы должны добавить индекс.
Если он проиндексирован, MySQL часто работает очень медленно с подвыборками.
Одна вещь, которую вы можете сделать, это преобразовать ваш подчиненный элемент во временную таблицу и присоединиться к ней.
Это будет выглядеть примерно так:
CREATE TEMPORARY TABLE IF NOT EXISTS max_chat_ids
( INDEX(id) )
ENGINE=MEMORY
AS ( 'SELECT MAX(id) as id FROM chat
WHERE (`to` = 1 and `del_to_status` = '0') or (`from` = 1 and `del_from_status` = '0')
GROUP BY CASE WHEN 1 = `to` THEN `from` ELSE `to` END' );
, тогда вам нужно просто присоединиться к временной таблице:
SELECT c.id, c.from, c.to, c.sent, c.message, c.recd FROM chat c
join max_chat_ids d on c.id=d.id
ORDER BY c.id DESC
limit 60
временные таблицы только живут в течение временисессии, поэтому, если вы проверите это в phpmyadmin, не забудьте выполнить оба запроса вместе с ';'между ними.
Если вы попробуете это, поделитесь своим результатом.