<small id='jDlBbMaX'></small> <noframes id='baRl3GYFC'>

  • <tfoot id='wT2XPWfoiG'></tfoot>

      <legend id='r5uQixMPS'><style id='5XR9v'><dir id='cvWuDY'><q id='Ak80nTFXNx'></q></dir></style></legend>
      <i id='ORnqX7'><tr id='fMineH'><dt id='lGS5V7'><q id='OlejyIf'><span id='YOBa5ds8uA'><b id='lp0cPY'><form id='Quxt'><ins id='viznoGRqQr'></ins><ul id='1Xy4f0vUMo'></ul><sub id='DMbYk4'></sub></form><legend id='JP8f'></legend><bdo id='N2mvBx'><pre id='V2JkOfLNvb'><center id='zce2T1'></center></pre></bdo></b><th id='j4gCKvPEq'></th></span></q></dt></tr></i><div id='Kgf41c7kC'><tfoot id='ie3Kz'></tfoot><dl id='Vbh4'><fieldset id='8Jh6'></fieldset></dl></div>

          <bdo id='T6or'></bdo><ul id='eL1zgY9O'></ul>

          1. <li id='3gMtv9B0'></li>
            登陆

            mysql千万级数据量刺进的几种计划耗时,看完就知道怎么挑选

            admin 2019-09-06 337人围观 ,发现0个评论

            首要mysql8声称功能是mysql5的2倍以上,而且一向听讲单表500万数据是一个瓶颈,那么我打算在最新版的mysql上导入一个1000万数据,验证看看mysql关于单表大数据mysql千万级数据量刺进的几种计划耗时,看完就知道怎么挑选的体现状况。

            mysql数据导入测验


            环境预备

            • 在虚拟机中安装好mysql8.0.17,存储引擎挑选innoDB,并新增一个study数据库,并创立t_user表,为简略起见,就2个字段,id和name;为削减网络或许存在问题,履行的sql放到本地履行。不需求树立索引,究竟导入大数据,有索引的话,还需而外保护,那功能更慢。
            create table t_user(id int, name varchar(20));
            • 虚拟机装备调整,为充沛运用虚拟机的功能,调整虚机装备,4个cpu,4g内存,10g的数据盘。

            由于硬盘是固态盘,信任更多的瓶颈在cpu和内存。限于装备,也只能评价个大约耗时。

            生成sql测验文件

            拼这个sql很简略,随意用什么言语,只需出产sql文件就行,单条的句子为:

            insert into t_user values('1','程序不便是0和1');

            这儿我运用java来生成sql文件,1000万数据大约花了45秒左右,完成代码截图参阅图1,成果参阅图2

            图1:生成sql文件

            图2:1千万条数据

            这个文本文件比较大,在mac上有58mysql千万级数据量刺进的几种计划耗时,看完就知道怎么挑选0多M,光翻开都要花必定的时刻,所以能够幻想,假如经过长途办法导入,对网络延时要求必定很高。

            计划1:存储进程导入

            先来看看存储进程导入千万条数据耗时,存过就不需求文件了,直接在进程体中循环拼接insert句子即可。代码如下:

            begin
            DECLARE v_i int unsigned DEFAULT 0;
            WHILE v_i < 10000000 DO
            insert into t_user values(v_i,'程序不便是0和1');
            SET v_i = v_i+1;
            END WHILE;

            存储进程耗时

            总耗时大约3个小时3分钟,仍是比较慢的。

            计划2:用mysql指令导入

            mysql指令是mysql自带的指令,坐落bin目录下,该指令比较简略,为了防止网络推迟,咱们先把用java生成的sql文件传到服务器上,运用rz指令进行上传到mysql的bin目录下,这样履行指令略微简略点,mysql千万级数据量刺进的几种计划耗时,看完就知道怎么挑选输入用户名和暗码即可履行。

            这儿有个当地需求注意下:由于sql文件较大,默许的话会报一个过错:ERROR 2006 (HY000): MySQL server has gone away,意思是记载数超越最大值。咱们能够更改大局变量,只在本次mysql进程中有用,重启mysql就失效了,假如想一向收效,能够在my.cnf中装备。更改后,就能够履行导入指令了。

            set global max_allowed_packet=1024*1024*1000;##设置为1G

            上传sql文件到服务器

             ./mysql -uroot -p study1 < t_user.sql 

            一共耗时大约3小时8分钟,跟第一种计划差异不大。总结一下,关于大批量数据根本不能运用insert into 的计划,改用文本导入计划。所以咱们从头生成数据文件。java代码更改如下:

            运用制表符号作为数据分隔符,便利下面指令运用。

            计划3:用mysqlimport指令导入

            mysql从安全考虑,默许对这种导入文件的方法是封闭的,能够用该指令查询:

            show variables like 'local_infile';

            在大局环境中翻开能够运用指令:

            set global local_infile=ON;

            如过没有翻开此参数,而履行了mysqlimport指令会收到一个报错:ERROR 1148 (42000): The used command is not allowed with this MySQL version。

            mysqlimport指令的常用参数介绍:

            • --fields-terminated-by=字符串:设置字段间的分隔符,能够为单个或多个字符。默许值为制表符“\t”,这便是上述咱们生成文件时分成心运用制表符。
            • -L, --local:表明从客户端恣意途径读取文件导入表中,未设置该选项时,默许只从datadir下同名数据库目录下读取文件导入。
            • -p, --password[=name]:指定用户暗码。
            • -u, --user=name:指定登入MySQL用户名。

            咱们现在履行下面指令履行导入:

             ./mysqlimport -uroot -p --local study2 t_user.txt 

            补白:

            1. 上面从头生成的数据文件(t_user.txt),相同先上传服务器。
            2. 文件名默许便是要导入的表名。
            3. 耗时大约1分18秒。

            mysqlimport其实是load data infile 的指令行东西,理论讲它们速度应该是相同的,所以就不再演示load data infile 指令了。

            数据有了,看看查询功率

            由于默许没有索引,所以随意查一个数据,大约耗时14秒。

            select * from t_user where id = 1

            加上索引之后,耗时简直为0。忽略不计

            可见千万的单表数据在走索引状况下,mysql其实仍是能够扛住的。世界第一初恋漫画

            总结

            直接看图吧

            根本上在大数据导入的状况下,mysqlimport指令耗时能够忽略不计了。只不过运用该指令需求翻开local_infile参数。

          2. 华泰证券:生猪饲养龙头高成长性是2020年农业板块出资主线
          3. 章鱼彩票老版本-金龙机电11月18日盘中涨幅达5%
          4. 请关注微信公众号
            微信二维码
            不容错过
            Powered By Z-BlogPHP