对于大数据量的一些
系统,面向数据库的问题,不仅效率低,而且长时间的数据
输入。特别喜欢
报告系统,用于数据的时间进口每天可能只要几个小时或十几个小时。因此,它是
优化数据库插入的
性能很有意义。
在MySQL InnoDB多项性能测试后,一些
方法可以提高插入效率
发现参考。
1。一个SQL语句插入多个数据。
常用的INSERT语句,例如:
插入` insert_table `(` DateTime `,` UID `,`内容`,`型`)
价值观(0,'userid_0 ','content_0 ',0);
插入` insert_table `(` DateTime `,` UID `,`内容`,`型`)
值(1,'userid_1 ','content_1 ',1);
把它改为:
插入` insert_table `(` DateTime `,` UID `,`内容`,`型`)
价值观(0,'userid_0 ','content_0 ',0),(1,'userid_1 ','content_1 ',1);
修改后的插入
操作可以提高
程序的插入效率。为SQL
执行效率的第二种最主要的
原因是,合并后的原木材积(MySQL的binlog和InnoDB的事务日志)降低,并减少了日志
磁盘的数据量和
频率,从而提高了效率。合并的SQL语句,它还可以减少SQL语句解析的数量,降低
网络传输的IO。
这里,我们提供了一些测试对比数据,它们分别将单个数据导入和
转换成SQL语句,并分别导入100, 1和1万个数据记录。
2。插入过程在事务中执行。
将插入项修改为:
开始交易;
插入` insert_table `(` DateTime `,` UID `,`内容`,`型`)
价值观(0,'userid_0 ','content_0 ',0);
插入` insert_table `(` DateTime `,` UID `,`内容`,`型`)
值(1,'userid_1 ','content_1 ',1);
…
承诺;
三.数据按
顺序插入。
数据以插入是指插入记录的主键,有序排列,例如,
日期是记录的关键:
插入` insert_table `(` DateTime `,` UID `,`内容`,`型`)
值(1,'userid_1 ','content_1 ',1);
插入` insert_table `(` DateTime `,` UID `,`内容`,`型`)
价值观(0,'userid_0 ','content_0 ',0);
插入` insert_table `(` DateTime `,` UID `,`内容`,`型`)
价值观(2,'userid_2 ','content_2 ',2);
把它改为:
插入` insert_table `(` DateTime `,` UID `,`内容`,`型`)
价值观(0,'userid_0 ','content_0 ',0);
插入` insert_table `(` DateTime `,` UID `,`内容`,`型`)
值(1,'userid_1 ','content_1 ',1);
插入` insert_table `(` DateTime `,` UID `,`内容`,`型`)
价值观(2,'userid_2 ','content_2 ',2);
当插入数据库,索引数据需要
维护,和无序的记录会增加维护索引的成本。我们可以参考的B+树索引使用InnoDB,如果每次插入记录在索引后,定位效率指数是非常高的,和小指数
调整;如果插入索引中的记录,B+树的分裂合并
处理消耗更多的计算资源,和定位效率会插入一条记录指数下降,大量的数据会有频繁的磁盘操作。
以下结果与随机数据和
连续数据的性能进行比较,分别记录为100, 1千、1万、10万和100万。
从测试结果来看,优化方法的性能得到了提高,但改进效果并不明显。
性能综合测试:
这为使用上述三种方法进行插入效率优化提供了一个测试。
从测试结果我们可以看到,数据融合+交易在小数据量的方法,性能的改善是明显的,大量的数据(超过1000万),其性能将急剧下降,这是因为数据量超过innodb_buffer容量,每个
位置指数涉及更多的磁盘读写操作,性能下降很快。使用+商业+合并
排序的数据数据数据量达到一千万以上的性能还是不错的,在大量的数据、有序数据的索引位置更方便,不需要频繁的磁盘读写操作,它可以保持高性能。
注意事项:uff1a
1、SQL语句受长度限制。在同一SQL中,它不能超过SQL长度限制。它可以通过max_allowed_packet
配置修改,
默认是1M,和8M是在测试的时候修改。
2。交易需要
控制和交易规模太大,
影响了execution.mysql效率有innodb_log_buffer_size配置项,将刷InnoDB数据到磁盘,然后效率会下降,所以最好的方法是提交事务的数据达到这个值之前。