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

经过对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万条数据记录。
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万的情况。
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万。
从测试结果来看,该优化方法的性能有所提高,但是提高并不是很明显。
性能综合测试:
这里提供了同时使用上面三种方法进行INSERT效率优化的测试。
从测试结果可以看到,合并数据+事务的方法在较小数据量时,性能提高是很明显的,数据量较大时(1千万以上),性能会急剧下降,这是由于此时数据量 超过了innodb_buffer的容量,每次定位索引涉及较多的磁盘读写操作,性能下降较快。而使用合并数据+事务+有序数据的方式在数据量达到千万级 以上表现依旧是良好,在数据量较大时,有序数据索引定位较为方便,不需要频繁对磁盘进行读写操作,所以可以维持较高的性能。
注意事项:
1. SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,通过max_allowed_packet配置可以修改,默认是1M,测试时修改为8M。
2. 事务需要控制大小,事务太大可能会影响执行的效率。MySQL有innodb_log_buffer_size配置项,超过这个值会把innodb的数据刷到磁盘中,这时,效率会有所下降。所以比较好的做法是,在数据达到这个这个值前进行事务提交。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# MySQL
# SQL插入
# 性能优化
# mysql大批量插入数据的4种方法示例
# MYSQL批量插入数据的实现代码
# MySQL实现批量插入以优化性能的教程
# MySQL批量插入遇上唯一索引避免方法
# Mysql使用insert插入多条记录 批量新增数据
# mysql 循环批量插入的实例代码详解
# MySQL批量插入数据脚本
# MySql批量插入优化Sql执行效率实例详解
# MySQL通过函数存储过程批量插入数据
# 都在
# 较小
# 很明显
# 主键
# 这是
# 会有
# 是有
# 不需要
# 是指
# 也能
# 很有
# 较高
# 我们可以
# 很高
# 太大
# 比较好
# 可以看到
# 三种
# 较多
# 长达
相关文章:
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
Python文件管理规范_工程实践说明【指导】
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
宝塔面板创建网站无法访问?如何快速排查修复?
浅谈Javascript中的Label语句
,网站推广常用方法?
建站之星在线客服如何快速接入解答?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
音乐网站服务器如何优化API响应速度?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
如何通过FTP空间快速搭建安全高效网站?
模具网站制作流程,如何找模具客户?
如何配置IIS站点权限与局域网访问?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
建站之星好吗?新手能否轻松上手建站?
C#如何在一个XML文件中查找并替换文本内容
高端网站建设与定制开发一站式解决方案 中企动力
建站之星Pro快速搭建教程:模板选择与功能配置指南
如何在搬瓦工VPS快速搭建网站?
已有域名和空间如何快速搭建网站?
如何在IIS7上新建站点并设置安全权限?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
金*站制作公司有哪些,金华教育集团官网?
平台云上自主建站:模板化设计与智能工具打造高效网站
山东网站制作公司有哪些,山东大源集团官网?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
历史网站制作软件,华为如何找回被删除的网站?
设计网站制作公司有哪些,制作网页教程?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
如何在云主机上快速搭建网站?
常州企业网站制作公司,全国继续教育网怎么登录?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
招贴海报怎么做,什么是海报招贴?
制作企业网站建设方案,怎样建设一个公司网站?
海南网站制作公司有哪些,海口网是哪家的?
建站上市公司网站建设方案与SEO优化服务定制指南
建站10G流量真的够用吗?如何应对访问高峰?
C++时间戳转换成日期时间的步骤和示例代码
如何快速搭建响应式可视化网站?
图册素材网站设计制作软件,图册的导出方式有几种?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
已有域名和空间如何搭建网站?
网站制作软件有哪些,制图软件有哪些?
c# 在高并发场景下,委托和接口调用的性能对比
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
,柠檬视频怎样兑换vip?
如何高效利用200m空间完成建站?
*请认真填写需求信息,我们会在24小时内与您取得联系。