私は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)
と宣言されます。
ファイルのサイズはどれくらいですか?このような大量のデータセットに対して、これは必ずしも珍しいものとして私を襲うわけではありません。 –
データを一度ロードしていることを忘れないでください。データをロードする限り。どれくらい遅いですか? – Ibu
バッファー・プールまたはinnodbログ・ファイルの構成が小さすぎると、挿入速度が制限されます。デフォルト値を使用すると、おそらく小さすぎます。また、皮肉なことに、バッファープールを大きすぎて*物理メモリーを超えてサーバーをスワップさせる可能性がある場合は、パフォーマンスも低下します。 –