作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试构建一个页面,其中显示了成员已收到的消息列表。我想出了这个 mySQL 查询,但它运行起来非常慢。执行它至少需要 10 秒。
SELECT senderid,
receiverid
FROM messages
WHERE ( receiverid, sentdate ) IN (SELECT receiverid,
Max(sentdate)
FROM messages
WHERE receiverid = '1'
GROUP BY senderid)
ORDER BY sentdate DESC
这是我正在使用的数据库:
`autoID` mediumint(11) unsigned NOT NULL AUTO_INCREMENT`senderID` mediumint(11) unsigned DEFAULT '0'`receiverID` mediumint(11) unsigned DEFAULT '0'`sentDate` datetime DEFAULT '0000-00-00 00:00:00'`message` longtextPRIMARY KEY (`autoID`)KEY `receiverID` (`receiverID`)KEY `senderID` (`senderID`)
数据库只有 150,000 个条目。我正在运行我自己的专用服务器,上面只有那个 mySQL 数据库。
非常感谢任何帮助。
G-Nugget,我在 sentDate 上添加了一个索引,但速度没有提高。这是 EXPLAIN(抱歉显示的方式。不知道我还能怎么做):
编号:1
选择_类型:主要
表:消息
类型:全部
possible_keys:null
键:空
key_len:null
引用:空
行数:149433
额外:在哪里使用;使用文件排序
编号:2
select_type:DEPENDENT SUBQUERY
表:消息
类型:引用
possible_keys:receiverID
key :receiverID
key_len:4
引用:常量
行数:20
额外:在哪里使用;使用临时的;使用文件排序
最佳答案
这个查询如何产生您提到的结果集?
SELECT m.senderid,
m.receiverid
FROM messages m
JOIN (
SELECT max(autoID) autoID,
receiverID, SenderID
FROM messages
GROUP BY receiverId, SenderID
) X on m.autoID = x.AutoId
WHERE m.receiverId = '1'
ORDER BY m.autoID desc
这利用了 autoID 和 senddate 很可能都随着时间的推移单调增加的假设。它提取每对不同的发送者/接收者之间的最新消息的 ID,然后使用这些 ID 选择要显示的消息表的子集。
关于mysql - 使用 IN 和 GROUP BY 运行 MySQL 查询非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13575997/
我是一名优秀的程序员,十分优秀!