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

假定我们的表结构如下

代码如下  

CREATE TABLE example (
example_id INT NOT NULL,
name VARCHAR( 50 ) NOT NULL,
value VARCHAR( 50 ) NOT NULL,
other_value VARCHAR( 50 ) NOT NULL
)

  通常情况下单条插入的sql语句我们会这么写:

代码如下  

INSERT INTO example
(example_id, name, value, other_value)
VALUES
(100, 'Name 1', 'Value 1', 'Other 1');

  mysql允许我们在一条sql语句中批量插入数据,如下sql语句:

代码如下  

INSERT INTO example
(example_id, name, value, other_value)
VALUES
(100, 'Name 1', 'Value 1', 'Other 1'),
(101, 'Name 2', 'Value 2', 'Other 2'),
(102, 'Name 3', 'Value 3', 'Other 3'),
(103, 'Name 4', 'Value 4', 'Other 4');

  如果我们插入列的顺序和表中列的顺序一致的话,还可以省去列名的定义,如下sql

代码如下  

INSERT INTO example
VALUES
(100, 'Name 1', 'Value 1', 'Other 1'),
(101, 'Name 2', 'Value 2', 'Other 2'),
(102, 'Name 3', 'Value 3', 'Other 3'),
(103, 'Name 4', 'Value 4', 'Other 4');

  上面看上去没什么问题,下面我来使用sql语句优化的小技巧,下面会分别进行测试,目标是插入一个空的数据表200W条数据

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

代码如下  

$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秒 ,代码如下:

代码如下  

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分钟!代码如下:

代码如下  

$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);

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

MYSQL批量插入数据库实现语句性能分析相关推荐

  1. sql批量插入数据mysql_MYSQL批量插入数据库实现语句性能分析

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

  2. MySql 批量插入数据库Java代码实现思路

    说明: mysql执行inset语句并未明确说明限制多少条语句,但是sql语句在超过一定的大小后,执行就会报错,百度得知mysql 5.7 最大语句执行最大不能超过4M,当然,在mysql执行批量插入 ...

  3. Oracle数据库:实现批量插入的sql语句

    目录 问题现象: 问题分析: 注意:这里一定要注意分号(;)的使用: 否则容易出现报错,如: 解决方法: 问题现象: 今天想使用Oracle数据库进行批量插入的操作,发现和想象中的不太一样,报错如下: ...

  4. mysql bytessent_如何对DSQLSERVER、MySQL、Orache语句性能分析

    SQLSERVER语句性能分析 SQL SERVER通过设置STATISTICS查看执行SQL时的系统情况. SET STATISTICS PROFILE ON:显示分析.编译和执行查询所需的时间(以 ...

  5. oracle insert汉字出错,Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名...

    本文主要向大家介绍了Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. Oracle数据库,用 ...

  6. mysql批量插入跟更新_Mysql批量插入和更新的性能-问答-阿里云开发者社区-阿里云...

    利用Hibernate,连接池使用的是BoneCP,做了一个MySql批量插入和批量更新的Demo,出现了下面两个问题. 1.批量插入.我采用的是原生态的JDBC,每次批量插入60条数据左右(数据量不 ...

  7. Mysql批量插入更新性能优化

    Mysql批量插入更新性能优化 对于数据量较大的插入和更新,因io/cpu等性能瓶颈,会产生大量的时间消耗,目前主流的优化主要包括预编译.单条sql插入多条数据.事务插入等,下面详细介绍一下: 单条插 ...

  8. mysql批量插入跟更新_Mysql批量插入和更新的性能

    利用Hibernate,连接池使用的是BoneCP,做了一个MySql批量插入和批量更新的Demo,出现了下面两个问题. 1.批量插入.我采用的是原生态的JDBC,每次批量插入60条数据左右(数据量不 ...

  9. mysql不支持addbatch_【MySql】Java 批量插入数据库addBatch

    //addBatch批量插入数据库 public static void insertCommentToMySql(Set commentList) { Iterator it = commentLi ...

最新文章

  1. 7-22关于agriculture-mvc的理解与完善,通过关键字模糊查询
  2. [译]SSAS下玩转PowerShell(三)
  3. SAP自定义查询工具SQVI
  4. python is not allowed to run_【无法解决】PySpider的部署运行而非调试界面上RUN运行
  5. python学习笔记(十五)标准库StringIO和BytesIO
  6. vue-cli项目布署问题解决:空白页、静态资源文件404错误、refrenceError:promise未定义(部分浏览器不支持ES6语法)
  7. mysql数据库druid密码加密_Druid数据库密码加密
  8. 配置监控中心-及管理平台
  9. Xshell利用密钥远程登录Linux
  10. bug篇——Windows启动redis报错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error...
  11. python中字符编码:coding utf-8, unicde, defaultencoding, UnicodeDecodeError, UnicodeEncodeError
  12. Kafka实战之整合Flume和Kafka完成实时数据采集
  13. Java基本数据类型取值范围
  14. SharePoint 网站登录不上,3次输入用户名/密码白页
  15. Linux修改/设置服务器ip地址
  16. 路由2台,二层交换机4台,三层1台,实现网络互联
  17. Java编程笔记9:容器(下)
  18. Excel中如何进行快速单位换算
  19. 【统计学】Python计算并绘制样本数据的经验分布函数
  20. 作家助手macos_我们正在寻找一般兴趣作家

热门文章

  1. WeightedRandomSampler示例
  2. 判断数字是否在区间 python实现
  3. VS项目属性中的C/C++运行库:MT、MTd、MD、MDd
  4. layui table 列覆盖
  5. 拉格朗日乘子法(Lagrange Multiplier)和KKT条件
  6. python sys.argv 默认值
  7. ios可变数组的操作
  8. Deep Learning(深度学习)学习笔记整理系列之(二)
  9. sh ndk-build.cmd command not found
  10. OpenCV Mat类详解