gpt4 book ai didi

mysql - 优化mysql查询语句

转载 作者:行者123 更新时间:2023-11-30 01:38:06 25 4
gpt4 key购买 nike

我应该如何优化这个查询?

EXPLAIN EXTENDED SELECT 
cm . *,
u1.Firstname AS u1Firstname,
u1.Lastname AS u1Lastname,
u2.Firstname AS u2Firstname,
u2.Lastname AS u2Lastname,
COUNT(*) AS Count
FROM
ChatMessage AS cm
LEFT JOIN
Users AS u1 ON cm.UserId = u1.UserId
LEFT JOIN
Users AS u2 ON cm.FriendId = u2.UserId
WHERE
(cm.UserId IN (292 , 289)) AND (cm.FriendId IN (292 , 289))
ORDER BY cm.DateAdded DESC;

EXPLAIN:

1 SIMPLE cm ALL fk_ChatMessage_Users1,fk_ChatMessage_Users2 238 59.24 Using where
1 SIMPLE u1 eq_ref PRIMARY PRIMARY 4 mhware.cm.UserId 1 100.00
1 SIMPLE u2 eq_ref PRIMARY PRIMARY 4 mhware.cm.FriendId 1 100.00

问题是:ChatMessage 正在使用外键,一个在 UserId 上,一个在 FriendId 上,指向用户表中的 UserId。

在 EXPLAIN 上你可以看到它不知道如何正确使用索引。如果我添加 (UserId, FriendId) 或/和 (FriendId, UserId) 的新索引,它有 4 种可能性,并且不会使用其中任何一种。

此语句大约每 1 秒运行一次,并转储我的充满垃圾的慢查询日志文件。

谢谢。

最佳答案

您可以尝试添加 2 个索引吗?一个在 cm.UserID 上,另一个在 cm.FriendId 上?我不太明白你的外键设置,因为你使用的是左连接,所以你是说用户可能不存在?为什么要使用外键?

关于mysql - 优化mysql查询语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16560321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com