mysql 插入优化_MySQL批量SQL插入性能优化

对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久。因此,优化数据库插入性能是很有意义的。

经过对MySQL InnoDB的一些性能测试,发现一些可以提高insert效率的方法,供大家参考参考。

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

常用的插入语句如:

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

修改成:

INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`)

VALUES ('0', 'userid_0', 'content_0', 0), ('1', 'userid_1', 'content_1', 1);

修改后的插入操作能够提高程序的插入效率。这里第二种SQL执行效率高的主要原因是合并后日志量(MySQL的binlog和innodb的事务让日志)减少了,降低日志刷盘的数据量和频率,从而提高效率。通过合并SQL语句,同时也能减少SQL语句解析的次数,减少网络传输的IO。

这里提供一些测试对比数据,分别是进行单条数据的导入与转化成一条SQL语句进行导入,分别测试1百、1千、1万条数据记录。

78d60321c991c7070c4a2b7d38f08322.png

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百、1千、1万的情况。

0cf607c7894753f7d4b81b51dbe9a56a.png

3、数据有序插入。

数据有序的插入是指插入记录在主键上是有序排列,例如datetime是记录的主键:

INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`)

VALUES ('1', 'userid_1', 'content_1', 1);

INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`)

VALUES ('0', 'userid_0', 'content_0', 0);

INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`)

VALUES ('2', 'userid_2', 'content_2',2);

修改成:

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

INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`)

VALUES ('2', 'userid_2', 'content_2',2);

由于数据库插入时,需要维护索引数据,无序的记录会增大维护索引的成本。我们可以参照InnoDB使用的B+tree索引,如果每次插入记录都在索引的最后面,索引的定位效率很高,并且对索引调整较小;如果插入的记录在索引中间,需要B+tree进行分裂合并等处理,会消耗比较多计算资源,并且插入记录的索引定位效率会下降,数据量较大时会有频繁的磁盘操作。

下面提供随机数据与顺序数据的性能对比,分别是记录为1百、1千、1万、10万、100万。

40bff38397ba682089849be798809459.png

从测试结果来看,该优化方法的性能有所提高,但是提高并不是很明显。

4、性能综合测试

这里提供了同时使用上面三种方法进行INSERT效率优化的测试。

d4cf302a704cb324e243ecebb1bd1aaf.png

从测试结果可以看到,合并数据+事务的方法在较小数据量时,性能提高是很明显的,数据量较大时(1千万以上),性能会急剧下降,这是由于此时数据量超过了innodb_buffer的容量,每次定位索引涉及较多的磁盘读写操作,性能下降较快。而使用合并数据+事务+有序数据的方式在数据量达到千万级以上表现依旧是良好,在数据量较大时,有序数据索引定位较为方便,不需要频繁对磁盘进行读写操作,所以可以维持较高的性能。

注意事项:

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 分页 order_Mysql查询使用limit分页,同时使用order by可能产生的问题

昨天遇到一个比较诡异的问题,在使用MySQL分页查询数据的时候,有的数据明明数据库里有,但是就是查不出来,有的数据却反而会重复出现。这里面就涉及到一个MySQL自身的问题。具体现象大概是:当使用order by 的字段有多个相…

中国上海量子计算机,首台光量子计算机在上海亮相

世界首台超越早期经典计算机的光量子计算机5月3日在上海亮相,十个超导量子比特纠缠首次成功实现,中国科学家再次站在创新的前沿。芯片越来越小,传统计算机未来必将遭遇计算极限。求解一个亿亿亿变量(10的24次方)的方程组,利用目前…

mysql 前索引_MySQL查询性能优化前,必须先掌握MySQL索引理论

数据库索引在平时的工作是必备的,怎么建好索引,怎么使用索引,可以提高数据的查询效率。而且在面试过程,数据库的索引也是必问的知识点,比如:索引底层结构选型,那为什么选择B树?不同存储引擎的索…

计算机巧用剪纸做画册教案,3 巧折巧剪教案公开课一等奖

巧折巧剪一、教学目标1.感受剪纸艺术的美,进一步了解剪纸的艺术特点,学习巧用折剪法进行剪纸创作。2.通过折与剪的方式,用对称剪纸的方法,设计制作一张好看的剪纸作品。3.感受剪纸的趣味和美感,激发对剪纸艺术的热爱。…

mysql rpl_MySQL管理工具MySQL Utilities — mysqlrplcheck(44)

mysqlrplcheck 工具是用来检查复制的先决条件的。这些检查的设计或者说是测试,是用来确保复制的健康。测试的内容有:在主上是否启用了二进制?是否有排除某些二进制(如有*_do_db 或 *_ignore_db的设置)?如果有,显示它们…

计算机视觉与图像处理面试题,深度学习图像处理算法工程师面试题

AI开发平台ModelArtsModelArts是面向开发者的一站式AI开发平台,为机器学习与深度学习提供海量数据预处理及半自动化标注、大规模分布式Training、自动化模型生成,及端-边-云模型按需部署能力,帮助用户快速创建和部署模型,管理全周…

inno setup 打包mysql_使用Inno Setup 打包jdk、mysql、tomcat、webapp等为一个exe安装包

1 ; 脚本由 Inno Setup 脚本向导 生成!2 ; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档!34 #define MyAppName "abc"5 #define MyAppVersion "1.0"6 #define MyAppPublisher "aaa"7 #define MyAppURL "ht…

计算机维护系统Win8PE,win8如何进入PE重装电脑系统

电脑进入PE系统有很多种办法,但是最简单的莫过于本地模式。通过韩博士中的本地模式功能下载PE镜像文件,就可以直接进入到PE桌面进行电脑系统重装。如果你不信,就跟着下面的流程走一次。小编有话说:大家在打开韩博士装机大师软件之…

电子科技大学 高级计算机结构,电子科技大学计算机系统结构作业答案

电子科技大学计算机系统结构作业答案 (26页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!1.90 积分查看考卷——作业提交1 当前得分:5 分(总分:100 分),折合成百分…

计算机应用基础 a卷,计算机应用基础笔试A卷.doc

文档介绍:计算机应用基础笔试A卷.doc汕头职业技术学校12级2012-2013学年度第二学期期末考试《计算机应用基础》A卷••n|r>•• ••多途第一部分第二部分总分一、选择题(30分)二、填空题(10分)三、判断题(10分)三、上机操作题(50分)第一部分笔试题考试时间:50分…

win7装mysql一直未响应_求助啊 WIN7下安装mysql出问题 老是说未响应~!!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼## The following options will be read by the MySQL Server. Make sure that# you have installed the server correctly (see above) so it reads this# file.#[mysqld]# The TCP/IP Port the MySQL Server will listen onport3…

测试手机速度的软件叫什么,手机测网速哪个软件好? 精确测速软件推荐

随着智能手机的普及,现在人们几乎已经人手一部手机。4G网络在我国已经非常的普及了,但是我们在使用手机时时常还是会发现会出现断网的情况,严重的影响了我们的工作以及上网体验,特别是在我们看视频或者打游戏时断网,更…

python在末尾加关闭程序_廖雪峰的Python教程教程-02

廖雪峰的Python教程:Python教程​www.liaoxuefeng.com廖老师的小结:1) list[],一种有序的集合:用len()函数可以获得list元素的个数;索引是从0开始,最后一个元素的索引是len(list)-1;list.append…

sensei鼠标测试软件,'黑科技'传感器打造出的FPS利器 - 赛睿Sensei 310 鼠标

黑科技传感器打造出的FPS利器 - 赛睿Sensei 310 鼠标2018-03-12 10:00:0010点赞13收藏20评论*级电竞外设品牌SteelSeries赛睿2017年在鼠标领域依靠Rival系列攻城掠地, 从低到高都有覆盖,但Rival系列全系都是右手的人体工学设计,对于喜欢对称设计的玩家来…

keepalived vip mysql_mysql+keepalived高可用集群

mysqlkeepalived高可用集群我们了解在LVS集群当中,LVS是整个机群的唯一入口!如果LVS出现故障的话,那么整个集群都将无法访问!像这种重要的服务器只有一台服务器在工作的情况,如果出现故障会对集群有较大的影响&#xf…

汉字计算机编码是谁发明的,神奇的汉字编码,了解一下

一直觉得不是由中国人发明的计算机,却可以使用汉字进行界面交互非常神奇。今天就来和大家聊一下关于汉字编码的最底层的逻辑。(1)汉字信息交换码(国标码)汉字交换码是指不同的具有汉字处理功能的计算机系统之间在交换汉字信息时所使用的代码标准。国家标准GB2312-80…

怎么把foxmail的邮件和服务器同步,foxmail设置ActiveSync同步功能怎么操作?设置ActiveSync同步功能方法介绍...

foxmail设置ActiveSync同步功能的操作常常困扰着不少用户,下面笔者就分享了foxmail设置ActiveSync同步功能的操作方法,不懂的朋友一起来看看吧。foxmail设置ActiveSync同步功能的操作方法一、开启和关闭"ActiveSync同步"功能的操作对新建QQMai…

mysql query cache_MySQL--query-cache

知识准备:1、mysql 的query-cache是什么?mysql可以把执行完成的select 语句和这个select 语句对应的结果集缓存起来;下次再用调用相同的select 语句时就直接返回结果,不是又去执行一次select 语句。由于少了执行的这一步&#xff…

牺牲阳极计算机安装标准储罐,钢质储罐阴极保护牺牲阳极保护方法与设计安装...

原标题:钢质储罐阴极保护牺牲阳极保护方法与设计安装钢质储罐阴极保护牺牲阳极保护方法与设计安装钢质储罐根据用途不同分为:原油罐,污水罐,消防水罐等,需要注意的是在原油罐内壁中禁止使用镁阳极,在原油储…

php页面不断弹出值_电脑自动弹出网页怎么办

电脑自动弹出网页的解决方法:我们可以利用360安全卫士中的弹窗过滤工具来解决此问题。首先我们打开360安全卫士;然后找到弹窗过滤工具;最后选择【强力模式】,保存设置即可。电脑自动弹出网页可以使用360安全卫士来进行弹窗拦截。打…