数据库数据同步,迁移等其他操作时,会涉及到数据的转移,插入操作。如果是千万级别的数据操作,那么怎样提高插入效率呢??可能有人会说,用load方法简单高效。是的,但是如果是不同数据库之间的同步插入该怎么解决呢??也许你有很高明的办法,也许你一无所措。这里演示一种常规操作方法,仅供参考。
方法/步骤
-
优化SQL插入语句;
比如循环一条一条插入,改成链接多个值进行插入。
将:
foreach($re as $it){
$sql="insert into table (id,name) values(".$it['id'].","."$it['name'].")";
mysql_query($sql);
}
改为:
$sql="insert into table (id,name) values";
foreach($re as $it){
$str= "'".$it['id']."','".$it['name']."'";
}
$sql .= "(".$str."),";
$sql2 = substr($sql,0,-1);
mysql_query($sql);
-
打开mysql的配置文件,my.ini文件,并找到:max_allowed_packet项;
-
将值修改大一点,具体根据自己需要修改。比如这里修改为:1G。
-
重启mysql服务;
-
如果运行页面提示内存溢出,可将值设大一点。
Allowed memory size of 134217728 bytes exhausted (tried to allocate 132907287 bytes)
-
这样,面对千万数据导入的时候,比原来那种方法至少快好多倍。
END