<?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批量添加数据的更多相关文章

  1. EF批量添加数据性能慢的问题的解决方案

    //EF批量添加数据性能慢的问题的解决方案 public ActionResult BatchAdd() { using (var db = new ToneRoad.CEA.DbContext.Db ...

  2. .Net中批量添加数据的几种实现方法比较

    在.Net中经常会遇到批量添加数据,如将Excel中的数据导入数据库,直接在DataGridView控件中添加数据再保存到数据库等等. 方法一:一条一条循环添加 通常我们的第一反应是采用for或for ...

  3. ThinkPHP批量添加数据和getField()示例

    批量添加数据 // 批量添加数据 $User = M('users'); $dataList[] = array('name'=>'thinkphp','email'=>'thinkphp ...

  4. thinkphp3.2 批量添加数据

    这是我遇到的thinkphp3.2 当中最让我无语的坑 批量添加数据有个方法是 addAll() 这个方法一定要注意数组的键名,一定要整齐!!! 可以在存入数据前,用ksort()方法将数组的键名排序 ...

  5. spring boot之使用通用Mapper批量添加数据

    通用Mapper是一款针对mybatis进行扩展的轻量级组件,使用起来非常方便.当调用其针对mysql进行批量添加数据的方法时,发现报错,仔细研究了一番,发现是在使用通用Mapper上出现了问题.下面 ...

  6. Yii2如何批量添加数据

    批量添加这个操作,在实际开发中经常用得到,今天小编抽空给大家整理些有关yii2批量添加的问题,感兴趣的朋友一起看看吧. 在上篇文章给大家介绍了关于浅析Yii2 gridview实现批量删除教程,当然, ...

  7. ADO.NET- 中批量添加数据的几种实现方法比较

    在.Net中经常会遇到批量添加数据,如将Excel中的数据导入数据库,直接在DataGridView控件中添加数据再保存到数据库等等. 方法一:一条一条循环添加 通常我们的第一反应是采用for或for ...

  8. Java使用Mysql数据库实现批量添加数据

    EmployeeDao.java //批处理添加数据 public int saveEmploeeBatch(){ int row = 0; try{ con = DBCon.getConn(); S ...

  9. java操作elasticsearch实现批量添加数据(bulk)

    java操作elasticsearch实现批量添加主要使用了bulk 代码如下: //bulk批量操作(批量添加) @Test public void test7() throws IOExcepti ...

  10. (转载)MySQl数据库-批量添加数据的两种方法

    方法一:使用excel表格 方法二:使用insert语句(FileWriter批量写入) 使用excel表格 1.打开数据表,按照表的字段在excel中添加数据.注意:表中字段名必须和excel中的名 ...

随机推荐

  1. git 提交去除每次输账号密码

    问题:在使用git代码仓库时,使用git clone 获取代码时,如果使用的是https协议,则在每次push时需要输入账号密码. 相关文档:文档一,文档二 验证了文档一种的方法二可用,记录一下 创建 ...

  2. js 关于本地文件的处理

    https://developer.mozilla.org/zh-CN/docs/Web/API/File/Using_files_from_web_applications

  3. day022 python (re模块和 模块)

    re模块是python提供的一套关于正则表达式的模块.核心功能有四个: 1.findall (查找所有,返回list) lst=re.findall("m",'salalwmaop ...

  4. ZOJ 1005:Jugs(思维)

    Jugs Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge In the movie "Die Har ...

  5. Atcoder 1973:こだわり者いろはちゃん / Iroha's Obsession

    C - こだわり者いろはちゃん / Iroha's Obsession Time limit : 2sec / Memory limit : 256MB Score : 300 points Prob ...

  6. tcp面试题

    常见面试题[问题1]为什么连接的时候是三次握手,关闭的时候却是四次握手? 答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文.其中ACK报文是用来应答的, ...

  7. django-dailyfresh

    Hold on ,learn by myself! redis nosql - 不支持sql语法 - 存储数据都是KV形式 - Mongodb - Redis - Hbase hadoop - Cas ...

  8. json/pickle模块(序列化)

    什么叫序列化? 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes 为什么要序列化? 你打游戏过程中,打累了,停下来,关掉游戏.想 ...

  9. POJ3904 Sky Code

    题意 Language:Default Sky Code Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3980 Accepte ...

  10. 固态硬盘和机械硬盘双硬盘安装win10,提示无法找到系统

    选择兼容模式,自己慢慢找,不同的主板所在的位置不同,大概是cms(兼容的意思)这个选项,选择enable就可以了