メンバーが受け取ったメッセージの一覧が表示されるページを構築しようとしています。この 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' 「メッセージ」ロングテキスト 主キー (`autoID`) KEY `receiverID` (`receiverID`) KEY `senderID` (`senderID`)
データベースには 150,000 エントリしかありません。そのmySQLデータベースのみを搭載した専用サーバーを実行しています。
どんな助けでも大歓迎です。
G-Nugget、sentDate にインデックスを追加しましたが、速度は向上しません。これがEXPLAINです(申し訳ありませんが、方法が示されています。他にどのようにできるかわかりません):
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; 一時的な使用; ファイルソートの使用