最近在使用TP框架写一个读取excel数据并将其插入到mysql数据库中的小功能。当excel中的数据条数非常多(几千甚至上万),并且多很多个列,并且某些列的内容还非常多的时候就容易出现问题。

  第一种:(亲测)

  在for循环中使用普通的add()方法进行数据写入。耗时最多。

  第二种:

  使用事务提交,每个指定间隔下提交一次事务,分批写入的思路。效率尚可。

  第三种:(亲测)

  通过循环将每条要写入得数据都放在一个数组里面,然后使用TP自带的批量写入方法,addAll()方法进行数据更新。

  不过这种方法可能会遇到内存溢出的情况。

  第四种:(亲测有效)

  优化sql语句,将sql语句进行拼接,使用 insert into table_name (a, b ...) values (), () ...,然后 M()->execute($sql)执行插入。

  在这种情况下,可能会遇到“mysql gone away”的错误提示。

  可以通过修改mysql/bin/my.ini中的 max_allowed_packet 的值改解决。

  此种方法用时最少。

  

$sql = "insert into table_name (val1, val2) values ";
for($i=0; $i<100000; $i++){
$sql .= "(2, 'abc'), ";
}
$sql = substr($sql, 0, strlen($sql)-1);
M() -> execute($sql);

Thinkphp大批量插入数据库的处理方法和速度对比的更多相关文章

  1. PHP大批量插入数据库的3种方法和速度对比

    第一种,使用insert into 插入,最后显示为:23:25:05 01:32:05 也就是花了2个小时多! $params = array(‘value'=>'50′); set_time ...

  2. 使用IDEA快速插入数据库数据的方法

    如上图所示:数据库创建表主键使用了自增列自增因此忽略,只有后两列非主键得数据,在数据较多得时候使用IDEA快捷键Ctrl+R键,快速查找替换.

  3. 【hibernate spring data jpa】执行了save()方法 sql语句也执行了,但是数据并未插入数据库中

    执行了save()方法  sql语句也执行了,但是数据并未插入数据库中 解决方法: 是因为执行了save()方法,也执行了sql语句,但是因为使用的是 @Transactional 注解,不是手动去提 ...

  4. C#把DataTable中数据一次插入数据库的方法

    现在实际的情况是这样的: 客户有一台打卡机,员工打卡的信息全部储存在打卡机的Access数据库里面,现在客户引入了一种新的管理系统,需要将Access数据库中的打卡数据同步到SQL Server数据库 ...

  5. PHP大批量插入mysql数据库的优化

    <?php /** * Created by PhpStorm. * User: hanks * Date: 6/2/2017 * Time: 6:03 PM */ //PHP大批量插入mysq ...

  6. Mybatis+Mysql插入数据库返回自增主键id值的三种方法

    一.场景: 插入数据库的值需要立即得到返回的主键id进行下一步程序操作 二.解决方法: 第一种:使用通用mapper的插入方法 Mapper.insertSelective(record): 此方法: ...

  7. 用js采集网页数据并插入数据库最快的方法

    今天教大家一个快速采集网站数据的方法,因为太晚了,直接上例子,这里以采集易车网的产品数据为例. 思路:利用js获取网页数据并生成sql命令,执行sql命令把采集的数据插入数据库. 1.用谷歌浏览器或者 ...

  8. MYSQL批量插入数据库实现语句性能分析

    假定我们的表结构如下 代码如下   CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ) NOT NULL, value ...

  9. SqlBulkCopy实现大容量数据快速插入数据库中

    一般情况下,我们手写sqlhelper类,在此类中定义一个数据插入到数据库的一个方法.将数据库连接密封在using()的语句中.using显示了Idispose接口.可以及时释放数据库连接资源.代码如 ...

随机推荐

  1. 算法训练 区间k大数查询(题解)

    资源限制 时间限制:1.0s   内存限制:256.0MB   问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个.   输入格式 第一行包含一个数n,表示序列长度. 第二行包 ...

  2. Navicat Premium 15 安装包&激活工具及安装教程(亲测可用)

    Navicat Premium 15 安装包及激活工具 网盘地址: 链接:https://pan.baidu.com/s/1GU9qgdG1dRCw9Un8H9Ba9A提取码:F1r9 开始安装 下载 ...

  3. Java基础_循环嵌套_打印乘法口诀、菱形,各种图形,计算二元一次和三元一次方程组_7

    循环嵌套 打印乘法口诀 for(int j=1;j<=9;j++){ for(int i=1;i<=j;i++){ System.out.print(i+"*"+j+& ...

  4. 『动善时』JMeter基础 — 48、使用JMeter自身代理录制测试脚本

    目录 1.测试计划内包含的元件 2.HTTP代理服务器的设置内容 3.设置浏览器的代理服务器 4.录制脚本 5.查看录制的脚本 6.HTTP代理服务器的排除模式 7.保存脚本 录制脚本只不过是我们日常 ...

  5. Java程序安装失败

      检查文件路径,应该不含中文汉字,空格以及特殊字符.应将jdk的安装目录设置为纯英文路径. 是否有多个安装程序同时运行,若多点安装程序则会安装失败,打开任务管理器,查看是否有多个安装程序运行 注册表 ...

  6. XML从入门到深入(超详细)

    一:什么是XML XML (eXtensible Markup Language)指可扩展标记语言,标准通用标记语言的子集,简称XML.是一种用于标记电子文件使其具有结构性的标记语言. XML可以标记 ...

  7. ClickHouse学习系列之五【系统库system说明】

    背景 之前介绍过ClickHouse相关的系列文章,现在ClickHouse已经能正常使用起来了,包括副本和分片.因为ClickHouse已经可以提供服务了,现在需要关心的就是服务期间该数据库的各项性 ...

  8. 『心善渊』Selenium3.0基础 — 6、Selenium中使用XPath定位元素

    目录 1.Selenium中使用XPath查找元素 (1)XPath通过id,name,class属性定位 (2)XPath通过标签中的其他属性定位 (3)XPath层级定位 (4)XPath索引定位 ...

  9. excel用函数去掉单元格内容中的括号,并只保留单元格里面的内容

    1.substitute(需要执行替换操作的单元格,需要替换的字符,替换后的字符,有多个需要替换的字符可以指定替换的第几个) 例如:aab--substitute("aab",&q ...

  10. 通过Cloudflare API进行CDN刷新

    1.Cloudflare CDN刷新说明 1.Cloudfalre同Akamai一样,只有刷新,没有预热的概念. 2.通过Cloudflare API进行刷新,需要用到登录用户的[邮箱][api密钥] ...