我试图构建一个页面,其中显示了一个成员收到的消息列表。我想出了这个mySQL查询,但运行速度非常慢。执行它至少需要10秒钟的时间。使用IN和GROUP BY运行MySQL查询非常缓慢
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` longtext PRIMARY KEY (`autoID`) KEY `receiverID` (`receiverID`) KEY `senderID` (`senderID`)
的数据库只有15万项。我正在运行我自己的专用服务器,只有它的mySQL数据库。
任何帮助是极大的赞赏。
G-Nugget,我在sentDate上添加了一个索引,但没有提高速度。这里的EXPLAIN(对不起显示不知道我还能怎么做的方式。):
ID:1
SELECT_TYPE:PRIMARY
表:消息
类型:
possible_keys:空
键:空
key_len:空
裁判:空
行:149433
额外:使用哪里;使用文件排序
ID:2
SELECT_TYPE:DEPENDENT SUBQUERY
表:消息
类型:REF
possible_keys:receiverID
键:receiverID
key_len:4
REF:常量
行:20
额外:使用where;使用临时;使用filesort
可能出现[获取具有列最大值的行](http:// stackoverflow。com/questions/121387/fetch-the-row-which-has-the-max-value-for-a-column) –
请发布查询的'EXPLAIN'。看起来你可以从'sentdate'的索引中受益。 –
嘿,伙计们,这是一个mySQL问题。投票结束它的人声称这是与甲骨文问题重复。不是! –