PHP实现插入100万条数据优化
第一种方法一条一条执行插入,结果会很慢
<?php header("Content-Type:text/html;charset=utf-8");
date_default_timezone_set("PRC");
$servername = "localhost";
$port = 3306;
$username = "root";
$password = "root";
$dbname = "charu"; // 创建数据库连接
$conn = new mysqli($servername, $username, $password, $dbname, $port); // 检测连接
if ($conn->connect_error) {
die("connect failed: " . $conn->connect_error);
} // 第一种,一条一条插入,结果要2分多钟
$costBegin = time();
echo date('Y-m-d H:s:i',$costBegin)."<br>";
for($i=0;$i<1000000;$i++){
$sql = sprintf("INSERT INTO charu (name, age) VALUES ( '%s', %d);", '测试', 10);
$conn->query($sql);
} $costEnd = time();
echo date('Y-m-d H:s:i',$costEnd)."<br>";
$cost = $costEnd - $costBegin;
echo date('Y-m-d H:s:i',$cost)."<br>"; $conn->close();
第二种使用insert合并插入
mysql里面是可以使用insert语句进行合并插入的,比如
INSERT INTO charu (name, age) VALUES ('name1', 18), ('name2', 19);
表示一次插入两条数据
<?php header("Content-Type:text/html;charset=utf-8");
date_default_timezone_set("PRC");
$servername = "localhost";
$port = 3306;
$username = "root";
$password = "root";
$dbname = "charu"; // 创建连接
$conn = new mysqli($servername, $username, $password, $dbname, $port); // 检测连接
if ($conn->connect_error) {
die("connect failed: " . $conn->connect_error);
} // 第二种,把所有要插入的数据生成为一条sql语句,所以执行的时间会快很多,测试时间是5秒多,服务器配置不同会影响时间
$costBegin = time();
echo date('Y-m-d H:s:i',$costBegin)."<br>";
$sql = sprintf("INSERT INTO charu (name, age) VALUES ");
for($i=0;$i<1000000;$i++){
$itemStr = '( ';
$itemStr .= sprintf("'%s', %d", '测试', 10);
$itemStr .= '),';
$sql .= $itemStr;
}
// 去除最后一个逗号,并且加上结束分号
$sql = rtrim($sql, ',');
$sql .= ';';
if ($conn->query($sql) === TRUE) {
echo "新记录插入成功". "<br>";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
} $costEnd = time();
echo date('Y-m-d H:s:i',$costEnd)."<br>";
$cost = $costEnd - $costBegin;
echo date('Y-m-d H:s:i',$cost)."<br>"; $conn->close();
使用第二种方法有可能会出现
MySQL server has gone away错误的解决办法
而我自己是直接在my.ini文件里面直接添加(max_allowed_packet = 30M)然后重启环境就可以了
PHP实现插入100万条数据优化的更多相关文章
- 教你如何6秒钟往MySQL插入100万条数据!然后删库跑路!
教你如何6秒钟往MySQL插入100万条数据!然后删库跑路! 由于我用的mysql 8版本,所以增加了Timezone,然后就可以了 前提是要自己建好库和表. 数据库test, 表user, 三个字段 ...
- Oracle中插入100万条数据
在做项目的工程中,需要数据库中存在大量的数据进行程序的验证,但是我们又没有数据,这时就需要我们自己手动建一个表,插入大量数据,进行验证. 那么插入大量数据的sql语句如下: insert into E ...
- 绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来
我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...
- Qt中提高sqlite的读写速度(使用事务一次性写入100万条数据)
SQLite数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很好时的过程,会极大地影响数据库存取的速度.例如:向数据库中插入100万条数 ...
- 插入1000万条数据到mysql数据库表
转自:https://www.cnblogs.com/fanwencong/p/5765136.html 我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入100 ...
- 极限挑战—C#+ODP 100万条数据导入Oracle数据库仅用不到1秒
链接地址:http://www.cnblogs.com/armyfai/p/4646213.html 要:在这里我们将看到的是C#中利用ODP实现在Oracle数据库中瞬间导入百万级数据,这对快速批量 ...
- 极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)
原文:极限挑战-C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码) 实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方 ...
- 使用hibernate在5秒内插入11万条数据,你觉得可能吗?
需求是这样的,需要查询某几个表的数据,然后插入到另外一个表. 一看到需求,很多人都会用hibernate去把这些数据都查询出来,然后放到list中, 然后再用for循环之类的进行遍历,一条一条的取出数 ...
- C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)
作者: Aicken(李鸣) 来源: 博客园 发布时间: 2010-09-08 15:00 阅读: 4520 次 推荐: 0 原文链接 [收藏] 摘要: ...
随机推荐
- 【Netapp】在模拟器中使用disk removeowner报错
报错信息如下: Cluster2::storage disk*> removeowner NET-1.43 Error: command failed: Disk NET-1.43 is not ...
- pvresize
lvm pv 扩容 pvresize 当PV对应的设备分区(如md软raid)扩容之后,利用该命令可以扩容PV
- vue2.0学习笔记(第八讲)(vue-cli的使用)
vue-cli相当于脚手架,可以帮助我们自动生成模板工程.其内部集成了很多的项目模板,如simple.webpack.webpack-simple等.其中webpack这个项目模板适用于大型项目的开发 ...
- Code force-CodeCraft-20 (Div. 2) D. Nash Matrix 详解(DFS构造)
D. Nash Matrix time limit per test2 seconds memory limit per test256 megabytes inputstandard input o ...
- P1518 两只塔姆沃斯牛 The Tamworth Two(简单的搜索题)
题目描述 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为(牛和John). 追击在10x10的平面网格内进行.一个格子可以是: 一个障碍物, 两头牛(它们总 ...
- 01 微信小程序入门
一. 小程序介绍 微信小程序是腾讯于2017年1月9日推出的一种不需要下载安装即可在微信平台上使用的应用,主要提供给企业.政府.媒体.其他组织或个人的开发者在微信平台上提供服务. 微信小程序和微信的原 ...
- 也谈解决Combobox绑定数据后取值出现System.Data.DataRowView的问题
刚才遇到一个怪现象:同一个窗口,同一张表,通过第一个Combobox值的改变,动态绑定第二个Combobox,结果出现一个怪现象,第一个Combobox有的值改变第二个Combobox一切正常,有几个 ...
- redis-py中的坑
今天发现,使用redis-py从redis中获取的数据竟然是加密的. conn = redis.Redis(host='redis_serverip', port=6379, password='re ...
- spring的aop的注解配置
一.使用注解的方式配置后置通知 第一步,创建通知类LogAdvice 第二步,要在spring主配置文件中声明以注解的方式配置spring aop 第三步,测试 二.其他异常配置 package c ...
- Spring Cloud feign GET请求无法用实体传参的解决方法
代码如下: @FeignClient(name = "eureka-client", fallbackFactory = FallBack.class, decode404 = t ...