25 GBの大きなテーブルを更新する方法、MyISAMの350,000,000以上のレコード? すべてのレコードについて、time
フィールドにランダムな日付を設定する必要があります。負荷のないサーバーでは、コマンドが実行されました:25 GBの大きなテーブルを更新する方法、MyISAMの350万以上のレコード?
UPDATE table SET time = FROM_UNIXTIME(1451595600 + FLOOR((RAND() * 31536000)))
mysqldがプロセッサをロードし、RAMの多くを取り上げ、午前中にサーバーへの負荷は最小限ですが、クエリがすべてのより多くの、実行されます55時間が経過しました。
私は何が起こっているかを理解することはできません!
CREATE TABLE `table` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`job_id` int(10) unsigned NOT NULL,
`lock` mediumint(6) unsigned DEFAULT '0',
`time` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `job_id` (`job_id`),
KEY `lock` (`lock`),
KEY `time` (`time`)
) ENGINE=MyISAM;
ADD:解決しよう
[email protected]:~ # iostat -p md1 60 5
:
私は、更新プロセスを中断。主除く
削除インデックス:
MariaDB [base]> ALTER TABLE `table` DROP INDEX `job_id`, DROP INDEX `lock`, DROP INDEX `time`;
Query OK, 339468609 rows affected (1 hour 3 min 28.89 sec)
Records: 339468609 Duplicates: 0 Warnings: 0
アップデート `time`フィールド:
MariaDB [base]> UPDATE `table` SET `time` = FROM_UNIXTIME(1451595600 + FLOOR((RAND() * 31539599)));
Query OK, 339468609 rows affected (16 min 8.09 sec)
Rows matched: 339468609 Changed: 339468609 Warnings: 0
追加インデックス:
MariaDB [base]> ALTER TABLE `table` ADD INDEX (`job_id`), ADD INDEX (`lock`), ADD INDEX (`time`);
Query OK, 339468609 rows affected (2 hours 18 min 58.32 sec)
Records: 339468609 Duplicates: 0 Warnings: 0
合計更新時間:3時間38分35.3秒
申し訳ありませんが、あなたの質問は分かりません。正確にしてください:_has_クエリが正しく終了しましたか?列が更新されたかどうか – arkascha
そのテーブルにはどのようなインデックスが存在するのかが重要です。質問にテーブルとインデックスの作成に関する情報を追加してください。 – arkascha
テーブルはまだ更新されていますが、私はそれが長いことを心配しています。そして、この時間の大部分はサーバにロードされていません – Dmitry