32

時々、プロジェクトのデータを再インポートする必要があるため、約 360 万行を MySQL テーブル (現在は InnoDB ですが、実際にはこのエンジンに限定されているわけではありません) に読み込みます。「Load data infile...」が最速のソリューションであることが証明されていますが、トレードオフがあります: - キーなしでインポートする場合、インポート自体には約 45 秒かかりますが、キーの作成には時間がかかります (すでに 20 分間実行されています.. .)。- テーブルのキーを使用してインポートを行うと、インポートが大幅に遅くなります

テーブルの 3 つのフィールドにキーがあり、数値フィールドを参照しています。これを加速する方法はありますか?

もう 1 つの問題は、低速のクエリを開始したプロセスを終了すると、データベース上で引き続き実行されることです。mysqld を再起動せずにクエリを終了する方法はありますか?

どうもありがとう DBa

4

3 に答える 3

54

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
于 2010-03-23T22:54:23.940 に答える
7

このブログ投稿はほぼ 3 年前のものですが、今でも関連性があり、「LOAD DATA INFILE」のパフォーマンスを最適化するためのいくつかの良い提案があります。

http://www.mysqlperformanceblog.com/2007/05/24/predicting-how-long-data-load-would-take/

于 2010-03-17T19:25:36.403 に答える
1

InnoDB は非常に優れたエンジンです。ただし、「調整」に大きく依存しています。1 つのことは、挿入が主キーの昇順でない場合、innoDB は MyISAM よりも少し時間がかかる可能性があることです。これは、より高い innodb_buffer_pool_size を設定することで簡単に克服できます。私の提案は、専用の MySQL マシンで合計 RAM の 60 ~ 70% に設定することです。

于 2013-03-13T12:23:52.660 に答える