gpt4 book ai didi

MySQL 查询改进(临时表、发送数据和排序)

转载 作者:行者123 更新时间:2023-11-30 00:14:31 25 4
gpt4 key购买 nike

我的查询如下所示:

    SELECT Sender, Recipient, Sent 
FROM
(SELECT Sender, Recipient, Sent FROM prv_chat WHERE 100 IN (Sender, Recipient))
AS chat
GROUP BY Sender, Recipient
ORDER BY Sent DESC LIMIT 30

其目的是搜索特定用户(在本例中为 ID 100 的用户)发送或接收的所有聊天消息(内部查询)

此查询在我的服务器上运行得非常频繁,并且占用了大量时间 (>0.1s)
phpMyAdmin分析工具显示~32%的时间是复制到tmp表(我猜是内部查询造成的),~30%的时间是发送数据 (缺少索引?)另外 30% 通过对结果进行排序

DESCRIBING 查询告诉我它没有使用任何索引(尽管它说存在可能的索引)

以下是完整列表: Indexes

有人知道吗?

编辑:

SHOW CREATE TABLE prv_chat

CREATE TABLE `prv_chat` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Sender` int(9) NOT NULL,
`Recipient` int(9) NOT NULL,
`Chat` text NOT NULL,
`Sent` datetime NOT NULL,
`Read` tinyint(1) NOT NULL,
PRIMARY KEY (`ID`),
KEY `Sender` (`Sender`,`Recipient`),
KEY `Sent` (`Sent`),
KEY `Sender_3` (`Sender`,`Recipient`,`Sent`),
KEY `Sender_2` (`Sender`,`Sent`),
KEY `Recipient` (`Recipient`)
) ENGINE=MyISAM AUTO_INCREMENT=125082 DEFAULT CHARSET=utf8

编辑2:我编辑了查询,排序结果部分现在已被消除。虽然发送结果复制到tmpo表进度仍然占用大量时间

EDIT3:再次更改了查询。现在唯一占用大量时间的部分是发送数据
DESCRIBE 返回: DESCRIBE

编辑 4: DESCRIBE 对于 Xint0 的查询: DESCRINE 2

最佳答案

运算符OR使mysql忽略索引。尝试一下:

SELECT * FROM(
SELECT * FROM prv_chat WHERE Sender=100
UNION ALL
SELECT * FROM prv_chat WHERE Recipient=100
) AS chat
ORDER BY Sent DESC LIMIT 30; --done by hand, may not run

关于MySQL 查询改进(临时表、发送数据和排序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23769784/

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