この単純な MySQL クエリに問題があります。
select sender as id from message where status=1 and recipient=1
送信者テーブルには数百万行あります。
これを SequelPro で実行すると、最初は非常に遅く (~4 秒以上)、次の実行では非常に速く (~0.018 秒) 実行されます。ただし、数分後にもう一度実行すると、同じことが再び行われます。
SQL_NO_CACHE を使用しようとしましたが、それでも同じ結果が得られます。
DB エンジンは innoDB、DB は MySQL Percona XtraDB クラスターです。説明結果は次のとおりです。
|id|select_type|table |type|possible_keys |key |key_len|ref |row |Extra
| 1|SIMPLE |message|ref |recipient,status, sent|sent|12 |const,const |2989 |NULL
「送信済み」は、(受信者、ステータス) の複数列のインデックスです。誰でもこの問題を解決する考えがありますか?
ありがとうございました。
追加(コメントから)
CREATE TABLE 'message' (
'id' int(20) NOT NULL AUTO_INCREMENT,
'sender' bigint(20) NOT NULL,
'recipient' bigint(20) NOT NULL,
'status' int(5) NOT NULL,
'date' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY ('id'),
KEY 'id' ('id'),
KEY 'recipient' ('recipient'),
KEY 'sender' ('sender'),
KEY 'date' ('date'),
KEY 'status' ('status'),
KEY 'sent' ('status','recipient')
) ENGINE=InnoDB AUTO_INCREMENT=90224500 DEFAULT CHARSET=latin1;