mariadb MAX()慢速查询

ui7jx7zq  于 2022-11-23  发布在  其他
关注(0)|答案(2)|浏览(133)

我有这个查询来获取按电话号码分组的最近的对话,但是查询时间太慢了。怎么才能更快呢?

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

数据库版本10.2.44-MariaDB

jucafojl

jucafojl1#

加快查询速度的一个主要方法是为相关列添加索引。为id列添加索引将加快查询速度(如果它还没有索引)。
正如@danblack在评论中提到的,MariaDB有一个EXPLAIN特性,可以分析查询,然后用分析来优化查询。
如果上述方法不起作用,还有一些更复杂的技术可以加快查询速度,例如编写存储过程

mbskvtky

mbskvtky2#

这将大大加快子查询的速度:

INDEX(phone)

我假设你已经有了'PRIMARY KEY(id)。
这种重新表述 * 可能 * 改进查询计划:

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

存储过程的帮助不足以保证其使用。
在询问性能问题时,应始终包括EXPLAIN SELECT ...SHOW CREATE TABLE

相关问题