MySQL-procedure(loop,repeat)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL-procedure(loop,repeat),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3104字,纯文字阅读大概需要5分钟。
内容图文
![MySQL-procedure(loop,repeat)](/upload/InfoBanner/zyjiaocheng/458/38b3c777cfb64a89a46832fe2d99696c.jpg)
CREATE TABLE `t2` ( `id` int(11) DEFAULT NULL,-- 行号id,不重复,共1023行 `t` varchar(3) DEFAULT NULL, `cnt` int(11) DEFAULT NULL, KEY `idx_id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8
2、再建一个表,放放生成的随机数据,表名 tx ,列 x ,每行存放0到10个字符。
CREATE TABLE `tx` ( `x` varchar(10) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8
3、存储过程,用rand()生成10以内的随机数来确定每个插入字符串的长度,插入50000次
1 drop procedure if exists proctx; 2 create procedure proctx() 3 begin 4 declare xid int;-- 随机来源id 5 declare xstr varchar(1);-- 来源id对应的单字 6 declare oid int;-- 字符串随机增长计数 7 declare xostr varchar(10);-- 字符串结果 8 declare txid int;-- 全体循环计数 9 set txid=0; 10 truncate tx; 11 12 loop1:loop 13 set txid=txid+1; 14 set oid=ceil(rand()*10);-- 用随机生成的循环次数来决定字符的长度 15 set xostr=‘‘;-- 在进入增长循环前要定为空字符串,否则默认为null,concat连null的结果都是null 16 17 repeat 18 set xid=ceil(rand()*1023); 19 select t into xstr from t where id=xid; 20 set xostr=CONCAT(xstr,xostr);-- 最终要插入 tx 表的字符串结果 21 set oid=oid-1; 22 until oid=0 end repeat; 23 24 insert into tx set x=xostr;-- 增长结束后插入表 25 if txid>=50000 then leave loop1;end if; 26 end loop; 27 end;
写过程中一开始没有注意要set xostr ,给这个字符串变量一个初始值,使它在后面的concat函数中的结果都变成了null,结果就是在tx表中插入了全是null
4、call proctx 后看结果
从 t 表,InnoDB,441.677s,7 min 21 s,113.205 lines per sec
[SQL]call proctx() 受影响的行: 1 时间: 441.677s
mysql> select * from tx; +----------------------+ | x | +----------------------+ | 灾#中育知斑列灯郎 | | 无降 | | u松戏 | | 扁 | | 订卖柜试击比所店 | | 濕如个 | | 癣表亿 | | 龙石周价险 | | {糯 | | Q门装寄司口附妻 | ......省略......
修改过程,从 t2 表,MyISAM,439.339s,7 min 19 s,113.895 lines per sec
[SQL]call proctx() 受影响的行: 1 时间: 439.339s
mysql> select * from tx; +----------------------+ | x | +----------------------+ | 象死宫势拍李反 | | p南展 | | 分进卡 | | 旗接酒z弱乐晗揭 | | 好富正奇阴园找缩 | | 风G起旗.证雅于 | | 计w合 | | 郑麻债空义海门箱招生 | | 差 | | 你高干加六非认自徐 |
......省略......
两个执行结果没有差距,不能说明什么问题,而且由于两次执行过程中实际产生的循环操作次数应该是不一样的,因为随机数的不同,其实两个结果的可比性还和随机数的性质有关联。另外仅仅是5w条的随机数用了7分多钟,实在是慢了点。如果能在几分钟内完成5kw的插入,说不定还能将随机数对时间产生的影响比例缩小,“那就得看这个随机到底是真随机还是假随机了”,两个引擎客观上应该是存在查询性能不同的特点的,但是这次这个试验应该是用错了测验对象,t 表记录量少,procedure语句执行时间侧重循环和随机了大概是。虽然没有检验出两种引擎的特点,但是生成随机字符串的目的还是达到了,就是性能有待优化。
MySQL-procedure(loop,repeat)
标签:
本文系统来源:http://www.cnblogs.com/right-dress/p/4805047.html
内容总结
以上是互联网集市为您收集整理的MySQL-procedure(loop,repeat)全部内容,希望文章能够帮你解决MySQL-procedure(loop,repeat)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。