大量INSERT
TableA(1000万件)から100万件をTableBにInsertしたい
・1件ずつコミット
while ($i <= 1000000){
$sql=qq{
insert into TableB select id,str from TableA where id=$i
};
$dbh->do($sql);
$dbh->commit();
$i++;
}
処理時間
16分58秒
・1万件ずつコミット
$dbh->do($sql);
if ( $i % 10000 == 0){
$dbh->commit();
}
処理時間
4分11秒
・10万件
5分11秒
- テストデータ作成
auto incrementで適当にデータを作る
CREATE TABLE HugeTable (
id INT(11) NOT NULL AUTO_INCREMENT,
str VARCHAR(32) NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB
INSERT INTO HugeTable (str)
VALUES ('A'),('B'),('C'),('D'),('E'),('F')
SelectInsertしてふくらます
INSERT INTO HugeTable (str)
SELECT str FROM HugeTable
X n回