MySQL大批量数据插入
公司有一个项目,需要频繁的插入数据到MySQL数据库中,设计目标要求能支持平均每秒插入1000条数据以上。目前功能已经实现,不过一做压力测试,发现数据库成为瓶颈,每秒仅能插入100多条数据,远远达不到设计目标。
到MySQL官方网站查了查资料,发现MySQL支持在一条INSERT语句中插入多条记录,格式如下:
INSERT table_name (column1, column2, ..., columnN)
VALUES (rec1_val1, rec1_val2, ..., rec1_valN),
(rec2_val1, rec2_val2, ..., rec2_valN),
... ...
(recM_val1, recM_val2, ..., recM_valN);
按MySQL官方网站,用这种方法一次插入多条数据,速度比一条一条插入要快很多。在一台开发用的笔记本电脑上做了个测试,果然速度惊人。
测试环境:DELL Latitude D630, CPU T7250 @ 2.00GHz, 内存 2G。Windows XP Pro中文版SP2,MySQL 5.0 for Windows。
MySQL是新安装的,建立了一个名为test的数据库,在test数据库建了一个t_integer表,共两个字段:test_id和test_value,两个字段都是INTEGER类型,其中test_id是Primary Key。
准备了两个SQL脚本文件(写了个小程序生成的),内容分别如下:
-- test1.sql
TRUNCATE TABLE t_integer;
INSERT t_integer (test_id, test_value)
VALUES (1, 1234),
(2, 1234),
(3, 1234),
(4, 1234),
(5, 1234),
(6, 1234),
... ...
(9997, 1234),
(9998, 1234),
(9999, 1234),
(10000, 1234);
-- test2.sql
TRUNCATE TABLE t_integer;
INSERT t_integer (test_id, test_value) VALUES (1, 1234);
INSERT t_integer (test_id, test_value) VALUES (2, 1234);
INSERT t_integer (test_id, test_value) VALUES (3, 1234);
INSERT t_integer (test_id, test_value) VALUES (4, 1234);
INSERT t_integer (test_id, test_value) VALUES (5, 1234);
INSERT t_integer (test_id, test_value) VALUES (6, 1234);
... ...
INSERT t_integer (test_id, test_value) VALUES (9997, 1234);
INSERT t_integer (test_id, test_value) VALUES (9998, 1234);
INSERT t_integer (test_id, test_value) VALUES (9999, 1234);
INSERT t_integer (test_id, test_value) VALUES (10000, 1234);
以上两个脚本通过mysql命令行运行,分别耗时0.44秒和136.14秒,相差达300倍。
基于这个思路,只要将需插入的数据进行合并处理,应该可以轻松达到每秒1000条的设计要求了。
补充:以上的测试都是在InnoDB表引擎基础上进行的,而且是AUTOCOMMIT=1,对比下来速度差异非常显著。之后我将t_integer表引擎设置为MyISAM进行测试,test1.sql执行时间为0.11秒,test2.sql为1.64秒。
补充2:以上的测试均为单机测试,之后做了跨机器的测试,测试客户端(运行脚本的机器)和服务器是不同机器,服务器是另一台笔记本,比单机测试时配置要好些。做跨机器的测试时,发现不管是InnoDB还是MyISAM,test1.sql速度都在0.4秒左右,而test2.sql在InnoDB时且AUTOCOMMIT=1时要80多秒,而设置为MyISAM时也要20多秒。
转载于:https://blog.51cto.com/ylj798/1061860
MySQL大批量数据插入相关推荐
- mysql大批量数据插入技巧
转自:https://jingyan.baidu.com/album/95c9d20d61b01dec4f75615a.html?picindex=6 首先我是简单的写了一个mysql的循环插入数据的 ...
- c mysql 插入大量数据_C++操作MySQL大量数据插入效率低下的解决方法
通常来说C++操作MySQL的时候,往Mysql中插入10000条简单数据,速度非常缓慢,居然要5分钟左右, 而打开事务的话,一秒不到就搞定了! 具体实现代码如下: #include #include ...
- 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) 一.问题 ...
- TOAD FOR MYSQL 进行数据插入时乱码的解决办法---MariaDB 5.5
最近使用mysql是发现插入的数据乱码,几经周折终于找到的解决方法,特作备忘. 开始有将mysql的字符集全部设置成utf8,如下: SHOW VARIABLES LIKE 'character_se ...
- mysql大量数据插入探讨(量变引起质变)
2019独角兽企业重金招聘Python工程师标准>>> 分类:见Visio图 关于大量数据导入是应注意以下几点: 分批导入,导入一批后最后提交(commit),可以使用jdbc的(e ...
- mysql 大量数据插入优化
1.一条SQL语句插入多条数据 修改后的插入操作能够提高程序的插入效率.这里第二种SQL执行效率高的主要原因是: (1)通过合并SQL语句,同时也能减少SQL语句解析的次数,减少了数据库连接的I/O开 ...
- Mysql大批量数据导入ElasticSearch
注:笔者环境 ES6.6.2.linux centos6.9.mysql8.0.三个节点.节点内存64G.八核CPU 场景: 目前Mysql 数据库数据量约10亿,有几张大表1亿左右,直接在Mysql ...
- mysql 批量数据插入很慢(kettle 输入输出组件) 性能优化办法
背景 最近在做数仓重构项目,遇到一些性能瓶颈,这里记录一下解决办法. 随着业务数据每天都在增加,几年前开发的etl任务开始跑不动了.大表一般是通过增量的方式插入,但是修复bug 或者每月/季度跑一次的 ...
- mysql 优化配置 大批量数据插入_php导入大量数据到mysql性能优化技巧
本文实例讲述了php导入大量数据到mysql性能优化技巧.分享给大家供大家参考.具体分析如下: 在mysql中我们结合php把一些文件导入到mysql中,这里就来分享一下我对15000条记录进行导入时 ...
最新文章
- java 数据结构 无向图_数据结构-无向图
- 车道线检测算法经典编程
- AI算法效率每16个月提速一倍,算力革命超越摩尔定律
- Maven坐标和依赖(三)
- 远程登录linux进程的状态_Linux实操篇 - 远程登录到Linux系统
- 用Excel制作改进前后漏斗模型图比较
- 红外热成像拥抱无人机 迸发安防救援新活力
- linux与s7-300,Siemens SIMATIC S7-300硬编码凭证安全限制绕过漏洞
- poj 2987 Firing (最大权 闭合 图)
- maven ojdbc6和ojdbc8 jar包下载地址
- 智慧校园视频监控管理系统平台建设的详情分析
- 2021年起重机械指挥考试资料及起重机械指挥理论考试
- 论文翻译:2021_语音增强模型压缩_Performance optimizations on deep noise suppression models...
- 解析MTK获取系统时间函数大全
- matlab读取bin文件
- java do po dto_彻底搞懂DAO,PO,BO,DTO,VO,DO
- 蓝芽技术的原理和应用(2)(转)
- 七月上(歌词背后的故事)
- 论DNS地址8.8.8.8和114.114.114.114
- 三角形形状判断(等边、等腰、直角、等腰直角、非等边)
热门文章
- iOS 关于关键字高亮
- 修复 XE7 , XE8 Frame 内 PopupMenu 快捷键失效问题
- hive实现not in
- SimpleAdapter类使用方法
- Dubbo使用启动时检查 check=“true“
- SQLServer基础:Apply关键字用法介绍
- 【原创】SQlServer数据库生成简单的说明文档小工具(附源码)
- 面向对象和面向过程_程序员给你解释:面向对象和面向过程的区别,到底是怎么回事?...
- 苹果手机6s运营商在哪里显示无服务器,iPhone6s信号很弱或无服务如何解决【解决方法】...
- python爬虫面试题