MySQL批量插入数据的优化方法,废话少说直接贴代码...
<?php
$link = mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('phone', $link) or die(mysql_error());
mysql_query("set names gbk");
$file=file('C:\Users\Administrator\Desktop\手机号段.txt');
$pagestartime=microtime();//开始执行前的时间
$sql="insert into number values";//对sql语句进行分割,是提高效率的关键
for($i=0;$i<count($file);$i++){
$arr=explode(',',$file[$i]);
$sql.="('',$arr[1],$arr[2],$arr[3],$arr[4],$arr[5]),";
}
$sql = rtrim($sql,','); //过滤字符串末端的逗号
$res=mysql_query($sql);
if($res){
echo "信息插入成功<br/>";
}else{
echo "SQL执行失败<br/>";
}
$pageendtime = microtime(); //执行完后的时间
$starttime = explode(" ",$pagestartime);
$endtime = explode(" ",$pageendtime);
$totaltime = $endtime[0]-$starttime[0]+$endtime[1]-$starttime[1];
$timecost = sprintf("%s",$totaltime);
echo "<br/>";
echo "共用时:".$timecost."秒";
?>
该方法的核心是对sql语句进行分割,提高效率;当数据量过大时,使用insert ... values的语句过长,就会出现MySQL server has gone away的错误; 这种情况可以通过修改max_allowed_packed的配置参数来避免,
mysql> show global variables like 'max_allowed_packet';
修改参数:mysql> set global max_allowed_packet=1024*1024*1024;
mysql> show global variables like 'max_allowed_packet';