1、一条SQL语句插入多条数据

修改后的插入操作能够提高程序的插入效率。这里第二种SQL执行效率高的主要原因是: (1)通过合并SQL语句,同时也能减少SQL语句解析的次数,减少了数据库连接的I/O开销,一般会把多条数据插入放在一条SQL语句中一次执行; (2)合并后日志量(MySQL的binlog和innodb的事务让日志)减少了,降低日志刷盘的数据量和频率,从而提高效率。

批量插入如果数据量太大可能出现下面的情况:

  MySQL报错:Packets larger than max_allowed_packet are not allowed (通过修改max_allowed_packet的值来解决,show VARIABLES like '%max_allowed_packet%';)

2、在事务中进行插入处理。

START TRANSACTION;
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`)  VALUES ('0', 'userid_0', 'content_0', 0);
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`)  VALUES ('1', 'userid_1', 'content_1', 1);
...
COMMIT;

  使用事务可以提高数据的插入效率,这是因为进行一个INSERT操作时,MySQL内部会建立一个事务,在事务内才进行真正插入处理操作。通过使用事务可以减少创建事务的消耗,所有插入都在执行后才进行提交操作

注意事项:

  1. SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,通过max_allowed_packet配置可以修改,默认是1M,测试时修改为8M。

  2. 事务需要控制大小,事务太大可能会影响执行的效率。MySQL有innodb_log_buffer_size配置项,超过这个值会把innodb的数据刷到磁盘中,这时,效率会有所下降。所以比较好的做法是,在数据达到这个这个值前进行事务提交。

4、关闭binlog、general-log

5、其他参数

bulk_insert_buffer_size=100M 
innodb_flush_log_at_trx_commit=2;  #禁止时时同步日志到磁盘

8. 将 innodb_autoextend_increment 配置由于默认8M 调整到 128M   innodb_autoextend_increment=128
         此配置项作用主要是当tablespace 空间已经满了后,需要MySQL系统需要自动扩展多少空间,每次tablespace 扩展都会让各个SQL 处于等待状态。增加自动扩展Size可以减少tablespace自动扩展次数。
     9.将 innodb_log_buffer_size 配置由于默认1M 调整到 128M  innodb_log_buffer_size=128M
         此配置项作用设定innodb 数据库引擎写日志缓存区;将此缓存段增大可以减少数据库写数据文件次数。
    10.将 innodb_log_file_size 配置由于默认 8M 调整到 128M  innodb_log_file_size=128M
         此配置项作用设定innodb 数据库引擎UNDO日志的大小;从而减少数据库checkpoint操作。

max_allowed_packet=1073741824
bulk_insert_buffer_size=100M
innodb_log_buffer_size=128M
innodb_log_file_size=128M
innodb_autoextend_increment=100
innodb_flush_method=O_DIRECT
innodb_io_capacity=2000
innodb_io_capacity_max=20000
innodb_flush_log_at_trx_commit=2

6、结合机器情况

2 cpu 8g 内存。进程数设置为 2 分页每页 100000 条,调大 max_allowed_packet=60M。528万条数据花了 15分钟。

大数据量的情况主要解决 分页 耗时问题。cpu 不足的情况下 多开线程反而更慢。

mysql 大量数据插入优化相关推荐

  1. mysql 定时统计_PHP+MySQL定时数据统计优化

    这次给大家带来PHP+MySQL定时数据统计优化,PHP+MySQL定时数据统计优化的注意事项有哪些,下面就是实战案例,一起来看一下. 在互联网项目中,对项目的数据分析必不可少.通常会统计某一段时间内 ...

  2. c mysql 插入大量数据_C++操作MySQL大量数据插入效率低下的解决方法

    通常来说C++操作MySQL的时候,往Mysql中插入10000条简单数据,速度非常缓慢,居然要5分钟左右, 而打开事务的话,一秒不到就搞定了! 具体实现代码如下: #include #include ...

  3. Mysql字符集数据插入问题(Incorrect string value ‘xE2x80xA2xE6xBCxAB...‘ for column ‘rname‘ at row 1)

    Mysql字符集数据插入问题(Incorrect string value: '\xE2\x80\xA2\xE6\xBC\xAB-' for column 'rname' at row 1) 一.问题 ...

  4. mysql 批量数据插入很慢(kettle 输入输出组件) 性能优化办法

    背景 最近在做数仓重构项目,遇到一些性能瓶颈,这里记录一下解决办法. 随着业务数据每天都在增加,几年前开发的etl任务开始跑不动了.大表一般是通过增量的方式插入,但是修复bug 或者每月/季度跑一次的 ...

  5. mysql大量数据插入探讨(量变引起质变)

    2019独角兽企业重金招聘Python工程师标准>>> 分类:见Visio图 关于大量数据导入是应注意以下几点: 分批导入,导入一批后最后提交(commit),可以使用jdbc的(e ...

  6. TOAD FOR MYSQL 进行数据插入时乱码的解决办法---MariaDB 5.5

    最近使用mysql是发现插入的数据乱码,几经周折终于找到的解决方法,特作备忘. 开始有将mysql的字符集全部设置成utf8,如下: SHOW VARIABLES LIKE 'character_se ...

  7. mysql大量数据分页优化_mysql大量数据分页优化

    一般我们数据量大的时候,然后就需要进行分页,一般分页语句就是limit offset,rows.这种分页数据量小的时候是没啥影响的,一旦数据量越来越大随着offset的变大,性能就会越来越差.下面我们 ...

  8. mysql大批量数据插入技巧

    转自:https://jingyan.baidu.com/album/95c9d20d61b01dec4f75615a.html?picindex=6 首先我是简单的写了一个mysql的循环插入数据的 ...

  9. [转]MySQL innoDB数据插入性能优化

    转载自: http://hiyijian.blog.163.com/blog/static/173086472201121621326471/ 起因:有一个innoDB引擎的表Table,在一个大概3 ...

最新文章

  1. dpkg安装deb缺少依赖包的解决方法
  2. 媒体查询中“屏幕”和“仅屏幕”之间有什么区别?
  3. c++ 动态分配内存
  4. Android查询数据库问题
  5. HDU1862 EXCEL排序【排序】
  6. .net自带的IOC容器MEF使用
  7. UI设计干货|从此做数据可视化页面不枯燥!
  8. 多线程操作SQLite注意事项
  9. 重点推荐:HP大中华区总裁孙振耀退休感言
  10. matlab遥感代码,遥感融合定量评价matlab程序代码
  11. 真的存在网络钓鱼吗?网络钓鱼技术之HTML走私分析
  12. 虚拟机镜像xp\win7\win10\win8\win2003,免安装系统,下载即用
  13. Qt样式表Qss(什么是QSS;基本语法;setStyleSheet函数;样式表的属性值;利用QtCreate实现样式切换;样式表实现皮肤改变实例)
  14. NetworkManager 替代工具 wicd
  15. Android程序员学WEB前端(12)-JavaScript(3)-正则表达式-Sublime
  16. CPU卡调试助手(FMCOS)
  17. 阿里云大数据ACP(三)可视化 Quick BI
  18. 【论文阅读】DeepIM: Deep Iterative Matching for 6D Pose Estimation
  19. 使用SQLyog导入EXCEL数据和合并数据表
  20. 性能测试工具loucst使用(最新版本)

热门文章

  1. 流媒体调研:云端视频监控与可视化对讲
  2. 我,一个走在创业路上人的自白——贝勒爷
  3. 养生指南 1 : 度 / 平衡(奔三了嘛 , 偶像)
  4. 【机器学习】贝叶斯分类器【下】
  5. datastage 函数_DataStage 调用存储过程(含输入输出参数)
  6. Python学习笔记:逢7说“过“
  7. windows下 cocos2dx CCLOG 打印中文变为问号的解决办法
  8. 世界主要城市中英文对照表(json格式)
  9. RHEL8.0操作系统安装步骤详解
  10. 商场弱电监控系统招标方案