第一种方法一条一条执行插入,结果会很慢

<?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万条数据优化的更多相关文章

  1. 教你如何6秒钟往MySQL插入100万条数据!然后删库跑路!

    教你如何6秒钟往MySQL插入100万条数据!然后删库跑路! 由于我用的mysql 8版本,所以增加了Timezone,然后就可以了 前提是要自己建好库和表. 数据库test, 表user, 三个字段 ...

  2. Oracle中插入100万条数据

    在做项目的工程中,需要数据库中存在大量的数据进行程序的验证,但是我们又没有数据,这时就需要我们自己手动建一个表,插入大量数据,进行验证. 那么插入大量数据的sql语句如下: insert into E ...

  3. 绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来

    我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...

  4. Qt中提高sqlite的读写速度(使用事务一次性写入100万条数据)

    SQLite数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很好时的过程,会极大地影响数据库存取的速度.例如:向数据库中插入100万条数 ...

  5. 插入1000万条数据到mysql数据库表

    转自:https://www.cnblogs.com/fanwencong/p/5765136.html 我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入100 ...

  6. 极限挑战—C#+ODP 100万条数据导入Oracle数据库仅用不到1秒

    链接地址:http://www.cnblogs.com/armyfai/p/4646213.html 要:在这里我们将看到的是C#中利用ODP实现在Oracle数据库中瞬间导入百万级数据,这对快速批量 ...

  7. 极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

    原文:极限挑战-C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码) 实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方 ...

  8. 使用hibernate在5秒内插入11万条数据,你觉得可能吗?

    需求是这样的,需要查询某几个表的数据,然后插入到另外一个表. 一看到需求,很多人都会用hibernate去把这些数据都查询出来,然后放到list中, 然后再用for循环之类的进行遍历,一条一条的取出数 ...

  9. C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

    作者: Aicken(李鸣)  来源: 博客园  发布时间: 2010-09-08 15:00  阅读: 4520 次  推荐: 0                   原文链接   [收藏] 摘要: ...

随机推荐

  1. CSS开发技巧(三):图片点击缩放

    前言  利用CSS实现图片的点击缩放是一个很值得研究的效果.在某些业务需求场景中,我们可能并没有足够的空间展示过大的图片,这就需要限制图片容器的宽度和高度.然而图片限制了宽度,一些图片的细节便又无法看 ...

  2. Forrester:开源APM发展势头强劲

    在企业的运营团队看来,系统的稳定性和可靠运行时间是至关重要的.因此,企业更乐意向能够负责的技术提供商购买开发完整的.有文档记录的,并且有售后支持的工具或软件. 一般来说,运营团队没有额外精力来应付新奇 ...

  3. 图论--网络流--费用流--POJ 2156 Minimum Cost

    Description Dearboy, a goods victualer, now comes to a big problem, and he needs your help. In his s ...

  4. 网络流中的图像转化为OpenCV中的Mat类型

    1,从网络中读取到的图像流,不支持查找,不能直接转化为Mat类型 2,例子如下: string Url = "http://192.168.0.110/cgi-bin/camera?reso ...

  5. spring类型转换

    如果表单提交的时候,有的字段是字符串类型,但是后台接收到的时候是其他类型(比如日期类型),我们就可以使用类型转换来把字符串类型转换为需要的类型.当字符串类型和后台的日期类型匹配的时候,也可以不做转换, ...

  6. bootstrap4中bootstrap_treeview不显示图标原因以及解决办法

    1.bootstrap4中bootstrap_treeview不显示图标原因 查看过大神的博客,经过自己试验,插件依赖: bootstrap/3.3.7 jquery/3.3.1 <link h ...

  7. asp.net core计划任务探索之hangfire+redis+cluster

    研究了一整天的quartz.net,发现一直无法解决cluster模式下多个node独立运行的问题,改了很多配置项,仍然是每个node各自为战.本来cluster模式下的各个node应该是负载均衡的, ...

  8. Android ListView 代码1

    目录 ListView效果 一.ListView的简单用法 二.定制ListView的界面 目标 步骤 1.定义一个实体类作为ListView适配器的适配对象. 2.为ListView的子项指定我们的 ...

  9. [hdu5375 Gray code]DP

    题意:给一个二进制码,其中有一些位上为'?',对每个问号确定是'0'还是'1',最后以它对应的格雷码来取数,第i位为1则取第i个数,求取得的数的和的最大值. 思路:二进制码B转换成格雷码G的方法是,G ...

  10. Linux shell 正则表达式用法

    1.“ \  ” 用法 用于关闭其后续字符的特殊含义,恢复字符的本身含义,如:\\ 表示字符 \ 2. “ . " 用法 匹配任意单个字符 3. " * " 用法 匹配任 ...