文档章节

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

 说谎的少年
发布于 2014/11/03 14:06
字数 444
阅读 435
收藏 18

这篇文章主要介绍了PHP大批量插入数据库的3种方法和速度对比,3种方法分别使用普通insert语句、insert into语句和事务提交,需要的朋友可以参考下

第一种方法:使用insert into 插入,代码如下:

?

1
2
3
4
5
6
7
$params = array (‘value '=>' 50′);
set_time_limit(0);
echo date (“H:i:s”);
for ( $i =0; $i <2000000; $i ++){
$connect_mysql ->insert( $params );
};
echo date (“H:i:s”);

最后显示为:23:25:05 01:32:05 也就是花了2个小时多!

第二种方法:使用事务提交,批量插入数据库(每隔10W条提交下)最后显示消耗的时间为:22:56:13 23:04:00 ,一共8分13秒  ,代码如下:

?

1
2
3
4
5
6
7
8
9
10
11
12
echo date (“H:i:s”);
$connect_mysql ->query(‘BEGIN');
$params = array (‘value '=>' 50′);
for ( $i =0; $i <2000000; $i ++){
$connect_mysql ->insert( $params );
if ( $i %100000==0){
$connect_mysql ->query(‘COMMIT');
$connect_mysql ->query(‘BEGIN');
}
}
$connect_mysql ->query(‘COMMIT');
echo date (“H:i:s”);

第三种方法:使用优化SQL语句:将SQL语句进行拼接,使用 insert into table () values  (),(),(),()然后再一次性插入,如果字符串太长,

则需要配置下MYSQL,在mysql 命令行中运行 :set global max_allowed_packet =  2*1024*1024*10;消耗时间为:11:24:06 11:25:06;

插入200W条测试数据仅仅用了1分钟!代码如下:

?

1
2
3
4
5
6
$sql = “insert into twenty_million (value) values”;
for ( $i =0; $i <2000000; $i ++){
$sql .=”('50′),”;
};
$sql = substr ( $sql ,0, strlen ( $sql )-1);
$connect_mysql ->query( $sql );

最后总结下,在插入大批量数据时,第一种方法无疑是最差劲的,而第二种方法在实际应用中就比较广泛,第三种方法在插入测试数据或者其他低要求时比较合适,速度确实快。


本文转载自:http://www.jb51.net/article/51975.htm

粉丝 1
博文 23
码字总数 3632
作品 0
秦皇岛
私信 提问
DataTable数据批量写入数据库三种方法比较 以及方法介绍

DataTable数据批量写入数据库三种方法比较 以及方法介绍 收藏 最近在将excel中的文件导入到数据库中,用程序进行编写,由于数据量较大所以速度很慢,后来采用了SqlBulkCopy类,解决了速度的问...

Yamazaki
2012/05/21
31
0
MySQL数据库inset性能优化

我们在使用中MySQL的时候难免会遇到大批量数据inset的情况,通常最简单的方法就是写一个insert,然后通过循环给变量赋值,批量插入数据库: //save rddform 经过方法经过亲测,性能不太好,本...

邵鸿鑫
2015/12/03
0
0
hibernate 批量数据插入 mysql

之前有一个也是关于hibernate大数据处理的一些问题,还没有找到答案,大家有兴趣可以去看看。别答非所问啊。 好吧,今天问一个Hibernate大批量数据插入的问题。 前些日子又遇到一个问题。 解...

Aschrius
2014/11/26
6.7K
6
mysql 提高insert into 插入速度的几种方法

当mysql大批量插入数据的时候就会变的非常慢, mysql提高insert into 插入速度的方法有三种: 第一种插入提速方法: 如果数据库中的数据已经很多(几百万条), 那么可以 加大mysql配置中的 bulkin...

yizhichao
2018/08/10
100
0
java开发中遇到的问题-阅历有限找不到现有的解决方案

公司需要完成一个功能 将100亿数据(大概)存入数据库 , 一条数据有 手机号码 地址 姓名 等等大概30个字段。 数据是保存在本地csv文件中的每个文件有50000条数据, 现在是统计这些数据 因为手机...

shuhuajian
01/03
536
5

没有更多内容

加载失败,请刷新页面

加载更多

MongoDB系列-解决面试中可能遇到的MongoDB复制集(replica set)问题

关注我,可以获取最新知识、经典面试题以及微服务技术分享   MongoDB复制集(replica set):MongoDB复制集维护相同数据集的一组mongod进程,复制集是生产部署的基础,具有数据冗余以及高可用...

ccww_
25分钟前
2
0
SpringBoot系列:Spring Boot集成Spring Cache,使用RedisCache

前面的章节,讲解了Spring Boot集成Spring Cache,Spring Cache已经完成了多种Cache的实现,包括EhCache、RedisCache、ConcurrentMapCache等。 这一节我们来看看Spring Cache使用RedisCache。...

杨小格子
34分钟前
2
0
OpenJDK之CountDownLatch

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CountDownLatch是Doug Lea在JDK1.5中引入的,作用就不详细描述了, await()方法,如果还有线程在执行,那么当前线程...

克虏伯
40分钟前
3
0
简单编程

1.编写一个程序,提示用户输入名和姓,然后以“名,姓”的格式打印出来。 #include<stdio.h>int main(){char name[3];char family[3];printf("Please input your name and family:\n...

电子工程197沈志初
45分钟前
4
0
详解Mysql分布式事务XA(跨数据库事务)

在开发中,为了降低单点压力,通常会根据业务情况进行分表分库,将表分布在不同的库中(库可能分布在不同的机器上)。在这种场景下,事务的提交会变得相对复杂,因为多个节点(库)的存在,可...

slagga
50分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部