時には、プロジェクトのデータを再インポートする必要があるため、MySQLテーブルに約360万行を読み取る必要があります(現在はInnoDBですが、実際にはこのエンジンに限定されていません)。 「データをファイルにロード...」が最速のソリューションであることが判明しましたが、トレードオフがあります。キーなしでインポートすると、インポート自体に約45秒かかりますが、キーの作成には時間がかかります(すでに20分間実行されています)。 。)。 -テーブルのキーを使用してインポートを実行すると、インポートが非常に遅くなります
テーブルの3つのフィールドにキーがあり、数値フィールドを参照しています。これを加速する方法はありますか?
もう1つの問題は、遅いクエリを開始したプロセスを終了すると、データベースで実行され続けることです。 mysqldを再起動せずにクエリを終了する方法はありますか?
どうもありがとうDBa
innodbと一括読み込みを使用している場合、ここにいくつかのヒントがあります。
csvファイルをターゲットテーブルの主キーの順序でソートします。innodbはクラスター化された主キーを使用するため、ソートするとロードが速くなることに注意してください。
私が使用する典型的なロードデータファイル:
truncate <table>;
set autocommit = 0;
load data infile <path> into table <table>...
commit;
ロード時間を増やすために使用できる他の最適化:
set unique_checks = 0;
set foreign_key_checks = 0;
set sql_log_bin=0;
csvファイルを小さなチャンクに分割する
バルクロード中に観察した典型的なインポート統計:
3.5 - 6.5 million rows imported per min
210 - 400 million rows per hour
このブログ投稿はほぼ3年前のものですが、それでも関連性があり、「LOAD DATA INFILE」のパフォーマンスを最適化するためのいくつかの良い提案があります。
http://www.mysqlperformanceblog.com/2007/05/24/predicting-how-long-data-load-would-take/
InnoDBはかなり良いエンジンです。ただし、これは「調整」されることに大きく依存しています。 1つは、挿入が主キーの増加順になっていない場合、innoDBはMyISAMよりも少し長くかかる可能性があることです。これは、より高いinnodb_buffer_pool_sizeを設定することで簡単に克服できます。私の提案は、専用のMySQLマシンでは、合計RAMの60-70%に設定することです。