SELECT * from messages WHERE id IN (SELECT max(id) from messages GROUP BY phone) AND chat = :ch AND status = :st AND seller_id = :seller ORDER BY created_at DESC
SELECT messages.*
FROM ( SELECT MAX(id) AS maxid FROM messages GROUP BY phone ) AS x
JOIN messages ON messages.id = x.maxid
WHERE chat = :ch
AND status = :st
AND seller_id = :seller
ORDER BY created_at DESC
2条答案
按热度按时间jucafojl1#
加快查询速度的一个主要方法是为相关列添加索引。为
id
列添加索引将加快查询速度(如果它还没有索引)。正如@danblack在评论中提到的,MariaDB有一个EXPLAIN特性,可以分析查询,然后用分析来优化查询。
如果上述方法不起作用,还有一些更复杂的技术可以加快查询速度,例如编写存储过程
mbskvtky2#
这将大大加快子查询的速度:
我假设你已经有了'PRIMARY KEY(id)。
这种重新表述 * 可能 * 改进查询计划:
存储过程的帮助不足以保证其使用。
在询问性能问题时,应始终包括
EXPLAIN SELECT ...
和SHOW CREATE TABLE
。