[{"data":1,"prerenderedAt":59},["ShallowReactive",2],{"article-88":3},{"code":4,"msg":5,"data":6,"count":14},200,"查询成功",{"id":7,"title":8,"keywords":9,"description":10,"category_id":11,"content":12,"body_html":13,"thumb_up":14,"clicks":15,"sort":14,"remark":16,"status":17,"is_open":17,"is_deleted":14,"is_top":14,"is_recommend":14,"create_time":18,"update_time":19,"image_id":20,"url":13,"member_id":14,"cate_name":21,"prev":22,"next":25,"tags":28,"words":32,"read_time":33,"comments":14,"cover":34,"relevant":35},88,"MySQL实现循环插入千万级数据","mysql","对于一些数据量较大的系统，数据库面临的问题除了查询效率低下，还有就是数据入库时间长。特别像报表系统，可能每天花费在数据导入上的时间就会长达几个小时之久。因此，优化数据库插入性能是很有意义的。",6,"###### 1、创建测试表\n\n```mysql\nCREATE TABLE `mysql_genarate` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `uuid` varchar(50) DEFAULT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB AUTO_INCREMENT=5999001 DEFAULT CHARSET=utf8;\n```\n\n###### 2、创建一个循环插入的存储过程\n\n```mysql\nCREATE DEFINER=`root`@`localhost` PROCEDURE `test_two1`( )\n\tBEGIN \n\tDECLARE i INT DEFAULT 0;\n\tWHILE i \u003C 3000 DO\n\t\tINSERT INTO mysql_genarate ( uuid ) VALUES( UUID( ) );\n\t\tSET i = i + 1;\n\tEND WHILE;\nEND\n```\n\n调用测试` call test_two1() `, 测试10000条数据耗时几分钟，如果是千万级数据，这个速度将无法忍受。 \n\n###### 3、优化存储过程\n\n使用批量插入的sql语句\n\n```mysql\nCREATE DEFINER=`root`@`localhost` PROCEDURE `insertPro`( IN sum INT )\n\tBEGIN\n\tDECLARE count INT DEFAULT 0;\n\tDECLARE i INT DEFAULT 0;\n\tSET @exesql = concat( \"insert into mysql_genarate(uuid) values\" );\n\tSET @exedata = \"\";\n\tSET count = 0;\n\tSET i = 0;\n\tWHILE count \u003C sum DO\n\t\tSET @exedata = concat( @exedata, \",(UUID())\" );\n\t\tSET count = count + 1;\n\t\tSET i = i + 1;\n\t\tIF i % 1000 = 0 THEN\n\t\t\tSET @exedata = SUBSTRING( @exedata, 2 );\n\t\t\tSET @exesql = concat( \"insert into mysql_genarate(uuid) values \", @exedata );\n\t\t\tPREPARE stmt FROM @exesql;\n\t\t\tEXECUTE stmt;\n\t\t\tDEALLOCATE PREPARE stmt;\n\t\t\tSET @exedata = \"\";\n\t\tEND IF;\n\tEND WHILE;\n\tIF length( @exedata ) > 0 THEN\n\t\tSET @exedata = SUBSTRING( @exedata, 2 );\n\t\tSET @exesql = concat( \"insert into mysql_genarate(uuid) values \", @exedata );\n\t\tPREPARE stmt FROM @exesql;\n\t\tEXECUTE stmt;\n\t\tDEALLOCATE PREPARE stmt;\n\tEND IF;\nEND\n```\n\n 调用 call insertPro(10000) ，耗时零点几秒，这个速度可以接受。 \n \n",null,0,712,"",1,"2020-06-12 17:56:22","2026-04-19 14:45:53",128,"Mysql",{"id":23,"title":24},87,"MySQL中InnoDB和MyISAM区别",{"id":26,"title":27},89,"获取腾讯“邮我”的链接",[29],{"id":30,"name":31},26,"MySQL",972,2,"https:\u002F\u002Ftp.myong.top\u002Fstorage\u002Farticle\u002F87\u002F675ea24d1392f61fb3cd682702835d.jpg",[36,41,46,49,54],{"id":37,"title":38,"create_time":39,"description":40},90,"Redis常见使用场景","2020-06-17 16:09:42","Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库，并提供多种语言的API。本篇文章，主要介绍利用PHP使用Redis，主要的应用场景。",{"id":42,"title":43,"create_time":44,"description":45},94,"客户端连接MySQL8提示 caching-sha2-password 问题","2020-10-19 10:55:26","在安装mysql8的时候如果选择了密码加密，之后用客户端连接比如navicate，会提示客户端连接caching-sha2-password,是由于客户端不支持这种插件，可以通过如下方式进行修改：",{"id":23,"title":24,"create_time":47,"description":48},"2020-06-12 17:11:21","InnoDB具有事务，支持4个事务隔离级别，回滚，崩溃修复能力和多版本并发的事务安全，包括ACID.如果应用中需要执行大量的INSERT或UPDATE操作，则应该使用InnoDB,这样可以提高多用户并发操作的性能。MyISAM管理非事务表，提供高速存储和检索，以及全文搜索能力，如果应用中需要执行大量的SELECT查询，那么MyISAM是更好的选择。",{"id":50,"title":51,"create_time":52,"description":53},86,"MySQL查询表结构命令","2020-06-09 11:30:00","###### MySQL查询表结构命令\n\n###### 1、查询表结构\n\n主要显示字段类型主键是否允许为空等\n\n```mysql\nDESC 表名;\n```\n\n结果显示\n\n| Field | Type         | Null | Key  | Default | Extra          |\n| :---- | ------------ | ---- | ---- | ------- | -------------- |\n| id    | int(11)      | NO   | P",{"id":55,"title":56,"create_time":57,"description":58},74,"超过经理收入的员工","2020-01-02 16:21:43","###### 题目\n",1783431657771]