大量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回