2016-07-15 2 views
0

私はSQLを初めて使いました。この質問は何度も聞かれましたが、答えのどれも私を助けませんでした。だから、私の状況についてのフィードバックを得ることを望んでいる。MySQLのロードデータのinfileが遅い

約150万行と48列のタブ区切りファイルを読み込もうとしています。各フィールドは二重引用符で囲まれています。私のクエリは1時間以上実行され、私はそれを殺しました。ここに私がやったことです:

CREATE TABLE mytable (
*48 variable declarations given types varchar, int, or decimal*, 
PRIMARY KEY (id) 
); 

 

load data local infile 'MyFile.tsv' 
into table mytable 
fields terminated by '\t' 
enclosed by '"' 
lines terminated by '\n' IGNORE 1 LINES 
(*comma separated list of all 48 variable names in 'mytable'*); 

は何かが、私はそれがこのクエリの実行時間を吹いている欠けていることを明らかにありますか?私は、必要に応じて十分なスペースだけで変数を宣言するように注意しました。したがって、3桁までの整数フィールドがある場合は、myfield int(3)と宣言されます。

+0

ファイルのサイズはどれくらいですか?このような大量のデータセットに対して、これは必ずしも珍しいものとして私を襲うわけではありません。 –

+0

データを一度ロードしていることを忘れないでください。データをロードする限り。どれくらい遅いですか? – Ibu

+0

バッファー・プールまたはinnodbログ・ファイルの構成が小さすぎると、挿入速度が制限されます。デフォルト値を使用すると、おそらく小さすぎます。また、皮肉なことに、バッファープールを大きすぎて*物理メモリーを超えてサーバーをスワップさせる可能性がある場合は、パフォーマンスも低下します。 –

答えて

0

の下に次の操作を実行して、ランタイムを増やし:

を使用すると、これらの変更は、MySQLサーバの再起動や再起動を生き残るためにしたい場合は、あなたがそれらを追加する必要があります設定ファイルに

を有効にしますMySQL用の設定ファイル/etc/mysql/my.cnfに書き込んでください。インストールの別の場所にある可能性があることに注意してください。

ファイルをsudoモードまたはルートモードでテキストエディタを使用して開き、これらの値がファイルに存在しない場合は追加します。それらが存在する場合は、それらのコメントを外してください。

query_cache_size = 268435456 
query_cache_type=1 
query_cache_limit=1048576 

クエリーキャッシングは、特にアプリケーションの読み込みが大きい場合に、Webアプリケーションの速度を大幅に向上させることができます。上記の方法を使用してステータスを監視し、時間の経過とともにどのように動作するかを確認してください。

@ref:http://dev.mysql.com/doc/refman/5.7/en/query-cache-configuration.html

関連する問題