我試圖構建一個頁面,其中顯示了一個成員收到的消息列表。我想出了這個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問題。投票結束它的人聲稱這是與甲骨文問題重複。不是! –