雷锋 发表于 2017-12-29 20:16:24

PHP批量添加数据

  <?php
  // 连接数据库
  header('content-type:text/html;');
  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
  最后总结下,在插入大批量数据时,
  第一种方法无疑是最差劲的,
  第二种方法在实际应用中就比较广泛,
  第三种方法在插入测试数据或者其他低要求时比较合适,速度确实快。
  原文链接
http://mp.weixin.qq.com/s/pzPUkx_77QxoMlRcuLGJHg
页: [1]
查看完整版本: PHP批量添加数据