LoginSignup
12
15

More than 5 years have passed since last update.

大量のレコードをMySQLにLOAD DATAで読み込む

Last updated at Posted at 2014-11-11
  • 1,000万レコードで400-500秒は割りと妥当。
  • TIPS
    1. レプリをしてなければ、SET sql_log_bin=OFFでバイナリログ無効化
    2. 安全を犠牲にして innodb_flush_log_at_trx_commit=0 or 2 でコミット時にログフラッシュ無効(元データがあるので失敗してもやり直せるならこれを)
    3. --skip_innodb_doublewrite を追加してダブルライトバッファを無効化
    4. MySQLのバージョンごとの最適なLOADのタイミングについては http://dbstudy.info/files/20131007/mysql56_load_r2.pdf の6枚目を参考に
    5. autocommit = 0 unique_checks = 0 foreign_key_checks = 0 あたりも効果がありそう
    6. インポート先がInnoDBだとすると、InnoDBへのインサートはClustered Indexの再構築であるという点を抑える必要がある。すなわちインポートするCSVをPrimary Keyでソートしておくと高速になる。
12
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
15