MySQL-procedure(cursor,loop) 中将spam_keyword表中的文字全部分割到t表当中,且每一行的字都不重复,那t表可以用来当作一个小字典,只有1000来个字符,这次把t表当作字符来源,写一个”以 t 表为字符库生成不定长随机字符的procedure“。

1、t表使用的是InnoDB引擎,为了有个区别比较,再新建一个t2表,用MyISAM引擎并复制t的数据,共1023行记录

create table t2 like t;
alter table t2 engine=myisam;
insert into t2 select *from t;
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次

 drop procedure if exists proctx;
create procedure proctx()
begin
declare xid int;-- 随机来源id
declare xstr varchar(1);-- 来源id对应的单字
declare oid int;-- 字符串随机增长计数
declare xostr varchar(10);-- 字符串结果
declare txid int;-- 全体循环计数
set txid=0;
truncate tx; loop1:loop
set txid=txid+1;
set oid=ceil(rand()*10);-- 用随机生成的循环次数来决定字符的长度
set xostr='';-- 在进入增长循环前要定为空字符串,否则默认为null,concat连null的结果都是null repeat
set xid=ceil(rand()*1023);
select t into xstr from t where id=xid;
set xostr=CONCAT(xstr,xostr);-- 最终要插入 tx 表的字符串结果
set oid=oid-1;
until oid=0 end repeat; insert into tx set x=xostr;-- 增长结束后插入表
if txid>=50000 then leave loop1;end if;
end loop;
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)的更多相关文章

  1. mysql while,loop,repeat循环,符合条件跳出循环

    1.while循环 DELIMITER $$ DROP PROCEDURE IF EXISTS `sp_test_while`$$ CREATE PROCEDURE `sp_test_while`( ...

  2. MySQL Procedure(MySQL存储过程)[转]

    ------Creating Stored Procedures in MySQL------ --Make sure you have version 5 of MySQL:   SELECT VE ...

  3. 初习mysql procedure

    1.存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户 ...

  4. MYSQL procedure

    没怎么接触过mysql procedure,今天建个calendar表还磨磨唧唧的,记录一下: CREATE PROCEDURE `new_procedure` (start_date DATA,en ...

  5. MySQL 中的三中循环 while loop repeat 的基本用法

    -- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循 ...

  6. MySQL 中while loop repeat 的基本用法

    -- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循 ...

  7. MySQL中 while loop repeat 的用法

    -- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循 ...

  8. MySQL的LOOP, LEAVE 和ITERATE语句(类似Continue、Break的写法)

    和REPEAT和while语句不同,LOOP.LEAVE.ITERATE更像其他编程语言中的goto语句. LOOP要设定一个label指定循环的开始位置,而LEAVE则像其他语言中的Break会离开 ...

  9. How to throw an error in MySql procedure?

    http://stackoverflow.com/questions/4862911/how-to-throw-an-error-in-mysql-procedure 9down votefavori ...

随机推荐

  1. 【FOL】万里长征第一步

    准备了好久了,中间断断续续看了些资料,也写了几个小demo练手,今天正式开始. 因为要模拟debug和release环境,手上资源又很缺,必须把一些已经拼好的图片进行切割,网络上找了半天倒是有几个切图 ...

  2. HTML 限制文本框只能输入特定字符(比如数字 onkeyup+onafterpaste)

    正则表达式1 <td><asp:TextBox ID="TextBox_username" Width="250" runat="s ...

  3. Node.js包

     1.app.js 2.m_p包下package.json 3.index.js  入口模块

  4. 【转】定时自动启动任务crontab命令用法

    每个操作系统都有它的自动定时启动程序的功能,Windows有它的任务计划,而Linux对应的功能是crontab. crontab简介 crontab命令常见于Unix和类Unix的操作系统之中,用于 ...

  5. (1)RGB-D SLAM系列- 工具篇(硬件+关键技术)

    /*************************************************************************************************** ...

  6. Muzli – 所有你需要的设计灵感都在这

    曾几何时,三个家伙一起工作,他们分享各种令人振奋的资源链接.然后,其中一个人有一个想法.一个绝妙的主意,是否可以有一种方式来与他人分享这些链接?因此, Muzli 诞生了.所有你需要的设计灵感这里都有 ...

  7. 2014年3月新鲜出炉的最佳 JavaScript 工具库

    一个 JavaScript 库是预先编写的 JavaScript 程序,用于简化 Web 应用程序开发,特别是对 Ajax 和其它 Web 为中心的技术.JavaScript 提供了多种方法,通过它来 ...

  8. 带给您灵感的25个最新鲜的 HTML5 网站

    感谢 HTML5 带来的惊人的先进特性,在未来几年,HTML5 将会继续发挥巨大的推动作用,不仅是在 Web 应用中,网页设计领域也会有新的变革.今天,我们在这里集合了能够带给您灵感的25个最新鲜的 ...

  9. 通过ABAP的标准功能,寻找源代码中的字符串

    程序名称: *ABAP_SOURCE_SCAN 查找 作用:通过这个标准程序,可以在系统的源代码中进行字符串的查找!

  10. SAP (ABAP) 常用的数学函数

    Function func Return value abs Absolute value of the argument arg (绝对值) sign Plus/minus sign of the ...