使用するテーブル
SQL
1CREATE TABLE IF NOT EXISTS `serials` ( 2 `id` int(11) NOT NULL auto_increment, 3 `number` char(12) BINARY NOT NULL, 4 PRIMARY KEY (`id`), 5 UNIQUE KEY `number` (`number`), 6 INDEX (`number`) 7) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
行いたいこと
大量にあるCSVデータを格納したい。
1ファイル150万件のシリアルナンバーが書いてあるデータを
LOAD DATA LOCAL INFILE "ファイル名.csv" INTO TABLE DB名
.serials
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' (number
);
これを30回繰り返して計4500万のシリアルデータを格納したいが5回ほど作業を行うとだんだん作業が遅くなり、15回目にSQLの通信が切れた。
疑問点
既にデータがある状態でCSVを読み込んで格納しようとすると動作が重たくなってしまうのか?現状の不具合の解消方法として
もっとファイルを細かくするしかないと思うがそれ以外に方法はあるか?
よろしくお願いします。
SQL
1DROP TABLE IF EXISTS `serials`; 2CREATE TABLE IF NOT EXISTS `serials` ( 3 `id` int(11) NOT NULL auto_increment, 4 `number` char(12) BINARY NOT NULL, 5 PRIMARY KEY (`id`, `number`) 6) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
このようにPRIMARY KEYを複数設定することでcsvデータを入れ込む際の
時間はぐっと減ったのですが、これはこれでいいのか不安です。
回答3件
あなたの回答
tips
プレビュー