我正在尝试构建一个页面,其中显示成员收到的消息列表。我想出了这个 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) 无符号 NOT NULL AUTO_INCREMENT `senderID` mediumint(11) 无符号 DEFAULT '0' `receiverID` mediumint(11) unsigned DEFAULT '0' `sentDate` 日期时间默认 '0000-00-00 00:00:00' `消息`长文本 主键(`autoID`) KEY `receiverID` (`receiverID`) KEY `senderID` (`senderID`)
该数据库只有 150,000 个条目。我正在运行我自己的专用服务器,上面只有那个 mySQL 数据库。
任何帮助是极大的赞赏。
G-Nugget,我在 sentDate 上添加了一个索引,但速度没有增加。这是解释(对不起,显示的方式。不知道我还能怎么做):
id:1
select_type:PRIMARY
table:messages
type:ALL
possible_keys:null
keys:null
key_len:null
ref:null
rows:149433
Extra:Using where; 使用文件排序
id:2
select_type:DEPENDENT SUBQUERY
table:messages
type:ref
possible_keys:receiverID
key:receiverID
key_len:4
ref:const
rows:20
Extra:Using where; 使用临时的;使用文件排序