PHP批量添加数据
<?php
// 连接数据库
header("content-type:text/html;charset=utf-8");
define("DB_HOST","127.0.0.1");
define("DB_USER","root");
define("DB_PASS","root");
define("DB_NAME","test");
define("DB_PORT",3306);
define("DB_CHAR","utf8");
define("APPNAME","");
$sqli = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT);
$sqli->query( "SET NAMES ".DB_CHAR );
ini_set("max_execution_time", "30");
/**
* 批量添加 方法1
* 使用insert into循环遍历添加
*/
for ( $i = 0; $i<2000000; $i++){
$sql = "INSERT INTO test_md5(`data`,`mda5_data`) VALUE (".$i.","".md5($i)."")";
$sqli->query( $sql );
}
/**
* 批量添加 方法2
* 使用事务提交,批量插入数据库(每隔10W条提交下)
*/
$sqli->query( "start transaction" );
for( $i=0;$i<=2000000;$i++ ){
$sql = "INSERT INTO test_md5(`data`,`md5_data`) VALUE (".$i.","".md5($i)."")";
// echo $i."=>".$sql."<br/>";
$sqli->query( $sql );
if($i%10000==0){
$sqli->query("commit transaction");
$sqli->query("begin");
}
}
$sqli->query("commit transaction");
/**
* 批量添加 方法3
* 使用优化SQL语句,将SQL语句拼接使用 insert into table() values(),(),()然后一次性添加;
*/
ini_set("max_execution_time", "200000");
echo $time_s = date("H:i:s",time())."<br/>";
$sql = "INSERT INTO test_md5(`data`,`md5_data`) VALUES ";
for ( $i = 1 ; $i<2000000; $i++ ){
$data_md5 = md5($i);
$sql .= "( ".$i.","".$data_md5.""),";
}
$sql = substr( $sql,0, strlen($sql)-1 );
// echo $sql;die();
$sqli->query( $sql );
echo $time_e = date("H:i:s",time())."<br/>";
/**
* 15:45:38
* 15:46:09
* 不到一分钟执行完毕
*/
注意
1:PHP的代码执行时间
max_execution_time = 200000
2:PHP每一次执行请求的内存空间
memory_limit = 1G
3:mysql接收的最大数据包
max_allowed_packet = 1G
最后总结下,在插入大批量数据时,
第一种方法无疑是最差劲的,
第二种方法在实际应用中就比较广泛,
第三种方法在插入测试数据或者其他低要求时比较合适,速度确实快。
- 上一篇: PHP过滤表单字段
- 下一篇:没有了