Mysql入门Mysql中几种插入效率的实例对比

Mysql入门Mysql中几种插入效率的实例对比,第1张

概述介绍《Mysql入门Mysql中几种插入效率的实例对比》开发教程,希望对您有用。

《MysqL入门MysqL中几种插入效率的实例对比》要点:
本文介绍了MysqL入门MysqL中几种插入效率的实例对比,希望对您有用。如果有疑问,可以联系我们。

MysqL教程前言

MysqL教程最近因为工作的需要,要在MysqL里插入大量的数据大约1000w,目测会比较耗时.所以现在就像测试一下到底用什么插入数据的方法比较快捷高效.

MysqL教程下面就针对每一种方法分别测试不同数据量下的插入效率.

MysqL教程测试数据库的基本与 *** 作如下:

MysqL教程MysqL> create database test;query OK,1 row affected (0.02 sec)MysqL> use test;Database changedMysqL> create table mytable(ID int primary key auto_increment,value varchar(50));query OK,0 rows affected (0.35 sec)MysqL> desc mytable;+-------+-------------+------+-----+---------+----------------+| FIEld | Type | Null | Key | Default | Extra  |+-------+-------------+------+-----+---------+----------------+| ID | int(11) | NO | PRI | NulL | auto_increment || value | varchar(50) | YES | | NulL |  |+-------+-------------+------+-----+---------+----------------+2 rows in set (0.02 sec)

MysqL教程方便测试,这里建了一个表,两个字段,一个是自增的ID,另一个是字符串表示内容.

MysqL教程测试时每次实验结束都要MysqL> truncate mytable,来清空已存在的表.

MysqL教程方法一:逐条插入

MysqL教程测试代码:(中间有1000条insert语句,用vim复制粘贴比较方便,写完后保存到a.sql,然后在MysqL提示符中输入source a.sql)

MysqL教程set @start=(select current_timestamp(6));insert into mytable values(null,"value");......insert into mytable values(null,"value");set @end=(select current_timestamp(6));select @start;select @end;

MysqL教程输出结果:

MysqL教程query OK,1 row affected (0.03 sec)......query OK,1 row affected (0.03 sec)query OK,0 rows affected (0.00 sec)+----------------------------+| @start   |+----------------------------+| 2016-05-05 23:06:51.267029 |+----------------------------+1 row in set (0.00 sec)+----------------------------+| @end   |+----------------------------+| 2016-05-05 23:07:22.831889 |+----------------------------+1 row in set (0.00 sec)

MysqL教程总共耗时31.56486s,事实上几乎每条语句花的时间是差不多的,基本就是30ms.

MysqL教程这样子1000w的数据就得花87h.

MysqL教程至于更大的数据量也就不试了,这种方法肯定不可取.

MysqL教程方法二:基于事务的批量插入

MysqL教程实际上就是把这么多的查询放在一个事务中.事实上方法一中没一条语句都开了一个事务,因此才会特别慢.

MysqL教程测试代码:(与方法一基本类似,主要添加两行,由于比较快,这里测试了多种数据量)

MysqL教程set @start=(select current_timestamp(6));start transaction;insert into mytable values(null,"value");commit;set @end=(select current_timestamp(6));select @start;select @end;

MysqL教程测试结果:

MysqL教程数据量 时间(s)1k  0.14581w  1.079310w 5.546006100w 38.930997

MysqL教程看出来基本是对数时间,效率还是比较高的.

MysqL教程方法三:单条语句一次插入多组数据

MysqL教程就是一条insert一次插入多个value.

MysqL教程测试代码:

MysqL教程insert into mytable values (null,"value"),(null,......    (null,"value");

MysqL教程测试结果:

MysqL教程数据量 时间(s)1k  0.151w  0.8010w 2.14100w *

MysqL教程看上去也是对数时间,而且比方法二要稍微快一点.不过问题在于单次SQL语句是有缓冲区大小限制的,虽然可以修改配置让他变大,但也不能太大.所以在插入大批量的数据时也用不了.

MysqL教程方法四:导入数据文件

MysqL教程将数数据写成数据文件直接导入(参照上一节).

MysqL教程数据文件(a.dat):

MysqL教程null valuenull value.....null valuenull value

MysqL教程测试代码:

MysqL教程MysqL> load data local infile "a.dat" into table mytable;

MysqL教程测试结果:

MysqL教程数据量 时间(s)1k  0.131w  0.7510w 1.97100w 6.751000w 58.18

MysqL教程时间最快,就是他了....

MysqL教程总结

MysqL教程以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对内存溢出PHP的支持.

总结

以上是内存溢出为你收集整理的Mysql入门Mysql中几种插入效率的实例对比全部内容,希望文章能够帮你解决Mysql入门Mysql中几种插入效率的实例对比所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1160071.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存