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批量添加数据的更多相关文章
- EF批量添加数据性能慢的问题的解决方案
//EF批量添加数据性能慢的问题的解决方案 public ActionResult BatchAdd() { using (var db = new ToneRoad.CEA.DbContext.Db ...
- .Net中批量添加数据的几种实现方法比较
在.Net中经常会遇到批量添加数据,如将Excel中的数据导入数据库,直接在DataGridView控件中添加数据再保存到数据库等等. 方法一:一条一条循环添加 通常我们的第一反应是采用for或for ...
- ThinkPHP批量添加数据和getField()示例
批量添加数据 // 批量添加数据 $User = M('users'); $dataList[] = array('name'=>'thinkphp','email'=>'thinkphp ...
- thinkphp3.2 批量添加数据
这是我遇到的thinkphp3.2 当中最让我无语的坑 批量添加数据有个方法是 addAll() 这个方法一定要注意数组的键名,一定要整齐!!! 可以在存入数据前,用ksort()方法将数组的键名排序 ...
- spring boot之使用通用Mapper批量添加数据
通用Mapper是一款针对mybatis进行扩展的轻量级组件,使用起来非常方便.当调用其针对mysql进行批量添加数据的方法时,发现报错,仔细研究了一番,发现是在使用通用Mapper上出现了问题.下面 ...
- Yii2如何批量添加数据
批量添加这个操作,在实际开发中经常用得到,今天小编抽空给大家整理些有关yii2批量添加的问题,感兴趣的朋友一起看看吧. 在上篇文章给大家介绍了关于浅析Yii2 gridview实现批量删除教程,当然, ...
- ADO.NET- 中批量添加数据的几种实现方法比较
在.Net中经常会遇到批量添加数据,如将Excel中的数据导入数据库,直接在DataGridView控件中添加数据再保存到数据库等等. 方法一:一条一条循环添加 通常我们的第一反应是采用for或for ...
- Java使用Mysql数据库实现批量添加数据
EmployeeDao.java //批处理添加数据 public int saveEmploeeBatch(){ int row = 0; try{ con = DBCon.getConn(); S ...
- java操作elasticsearch实现批量添加数据(bulk)
java操作elasticsearch实现批量添加主要使用了bulk 代码如下: //bulk批量操作(批量添加) @Test public void test7() throws IOExcepti ...
- (转载)MySQl数据库-批量添加数据的两种方法
方法一:使用excel表格 方法二:使用insert语句(FileWriter批量写入) 使用excel表格 1.打开数据表,按照表的字段在excel中添加数据.注意:表中字段名必须和excel中的名 ...
随机推荐
- annotation注释简单介绍
元数据的作用 如果要对于元数据的作用进行分类,目前还没有明确的定义,不过我们可以根据它所起的作用,大致可分为三类: l 编写文档:通过代码里标识的元数据生成文档. l ...
- PAT-1084(外观数列 ) && PAT-1085 (PAT单位排行)
1084 利用字符串string的可加性 #include <bits/stdc++.h> using namespace std; int main () { int x,n; cin ...
- xdoj1194----(bsgs-用数组实现链表 真的是好啊)
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> ...
- centos7 启动mysql
密码无法登录问题: 在my.cnf 中加一句 skip-grant-tables : 重启mysql服务: mysql -uroot -p: USE mysql ; 进入后,修改密码 .UPDA ...
- Mybatis(七)-- LRU LFU 算法
这篇博客主要介绍LRU LFU 算法,因为在Mybatis的缓存中会用到,所以放到这个系列中了.此外,这是我翻译的一篇文章,觉得原文已经写的很好了,所以就直接翻译一下,留作知识整理. 英文原文出处如下 ...
- springboot配置文件启动顺序
[1]项目内部配置文件 spring boot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件 1.–f ...
- 【mybatis源码学习】mybatis和spring框架整合,我们依赖的mapper的接口真相
转载至:https://www.cnblogs.com/jpfss/p/7799806.html Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注 ...
- C语言函数指针的使用
使用函数指针时一定要注意,因为c不会检查参数是否正确 区分返回指针的函数和函数指针 int *f4();返回一个整数指针 int (*f5)();返回整数的函数指针 int * (*f6)();返回整 ...
- kubebapps 添加私有harbor 中的helm repo
kubebapps 支持添加私有的helm repo,基于http basic auth ,我们通过添加header 就可以了 备注 harbor helm 以及kubebapps 的搭建可以参考 h ...
- camunda 开源的bpm系统
看到camunda 是在zeebe 的介绍中,实际上camunda 是一个很完整的bpm 平台,包含了很多在bpm 系统中需要的组件,以下为一张参考图 从上图可以看出,组件还是比较多的,对于完整的bp ...