Android デバイスから送信されたタイムスタンプと関連するユーザー データを MySQL テーブルに格納しています。その構造は次のとおりです。
CREATE TABLE IF NOT EXISTS `breadcrumbs` (
`breadcrumbs_id` bigint(20) NOT NULL AUTO_INCREMENT,
`users_id` int(10) NOT NULL,
`timestamp` bigint(20) NOT NULL,
`data` text,
PRIMARY KEY (`breadcrumbs_id`,`users_id`),
KEY `fk_breadcrumbs_users1` (`users_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=468792 ;
Android デバイスはタイムスタンプをミリ秒単位で送信しており、UTC 時間標準に従ってタイムスタンプを作成しています。1 か月以上経過したブレッドクラムを削除しようとしています。MySQL にはミリ秒形式がないため、次のクエリを使用しています。
DELETE FROM breadcrumbs WHERE ((`timestamp`)/1000) < UNIX_TIMESTAMP() - 2592000;
レコードの削除にはかなりの時間がかかります。以下は、削除クエリを実行した結果です。
/*382,580 rows affected, 0 rows found. Duration for 1 query: 36.894 sec. */
私の質問は次のとおりです。
- ブレッドクラムを正しく拾っていますか?
DELETE
現在よりも高速に実行されるようにクエリを最適化できますか?