このクエリは、mysqlの低速クエリログに表示されます。これには11秒かかります。なぜこのクエリが遅いのですか?
INSERT INTO record_visits
(record_id, visit_day)
VALUES
('567', NOW());
の表は、501043件のレコードを持っているし、それが構造だ次のようになります。間違っている可能性が
CREATE TABLE IF NOT EXISTS `record_visits` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`record_id` int(11) DEFAULT NULL,
`visit_day` date DEFAULT NULL,
`visit_cnt` bigint(20) DEFAULT '1',
PRIMARY KEY (`id`),
UNIQUE KEY `record_id_visit_day` (`record_id`,`visit_day`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
何?なぜこのINSERTに時間がかかりますか?
UPDATE
私はすべての問題の原因となったものを、見つけました。そのテーブルに非常に重い "ON INSERT"トリガが作成されました。 MyISAMのテーブルロックと一緒に、INSERTクエリに膨大なクエリ時間を与えました。おそらくこれが@Oswaldのコメントでこのような状況を再現できなかった理由です。
本当の問題は、MySQLはトリガー内でクエリを記録しないことと、アプリケーションのプロファイリング時に常にそれらについて覚えておく必要があることです。
皆様、お手数をおかけしていただきありがとうございます。回答は解決策に近づいています。
MySQLサーバのヘルプを再起動しますか? –
あなたのUNIQUEインデックスのためでしょう。しかしそれはそれほど遅くすべきではありません。 – alexn
@Timeマシン番号は、再起動後も変わりません。 –