MySQL-procedure(loop,repeat)
在 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)的更多相关文章
- mysql while,loop,repeat循环,符合条件跳出循环
1.while循环 DELIMITER $$ DROP PROCEDURE IF EXISTS `sp_test_while`$$ CREATE PROCEDURE `sp_test_while`( ...
- MySQL Procedure(MySQL存储过程)[转]
------Creating Stored Procedures in MySQL------ --Make sure you have version 5 of MySQL: SELECT VE ...
- 初习mysql procedure
1.存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户 ...
- MYSQL procedure
没怎么接触过mysql procedure,今天建个calendar表还磨磨唧唧的,记录一下: CREATE PROCEDURE `new_procedure` (start_date DATA,en ...
- MySQL 中的三中循环 while loop repeat 的基本用法
-- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循 ...
- MySQL 中while loop repeat 的基本用法
-- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循 ...
- MySQL中 while loop repeat 的用法
-- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循 ...
- MySQL的LOOP, LEAVE 和ITERATE语句(类似Continue、Break的写法)
和REPEAT和while语句不同,LOOP.LEAVE.ITERATE更像其他编程语言中的goto语句. LOOP要设定一个label指定循环的开始位置,而LEAVE则像其他语言中的Break会离开 ...
- How to throw an error in MySql procedure?
http://stackoverflow.com/questions/4862911/how-to-throw-an-error-in-mysql-procedure 9down votefavori ...
随机推荐
- jquery easyui 弹出消息框 (转载) jQuery EasyUI API 中文文档 - 消息框(Messager) http://www.cnblogs.com/hantianwei/archive/2012/03/19/2407113.html
<html> <head> <!-- 导入easyui插件的js和css样式; --> <link rel="stylesheet" ty ...
- Web应用网络模型
Web应用网络模型 前言 这篇文章要介绍的是一个常见Web应用基本的过程跟网络模型,当然,对于多数的Client/Server应用也是适用的.延续这个系列文章的风格,只管通俗不管严谨. 概览 总体模型 ...
- CGI与Servlet的比较
转自:http://www.maxhis.info/java/cgi-vs-servlet/ 谢! 概括来说,CGI和Servlet可以完成相同的功能. 一:CGI(Common Gateway In ...
- B树详解
B树 具体讲解之前,有一点,再次强调下:B-树,即为B树.因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解.如人们可能会以为 ...
- Squire – 简洁的 HTML5 富文本编辑器
Squire 是一个简洁的 HTML5 富文本编辑器,它提供了强大的跨浏览器的标准化,超级轻巧灵活.它是建立在现在和未来并作为研究,因此并不支持那些古老的浏览器. 在线演示 源码下载 您可能 ...
- Framework7 – 赞!功能齐全的 iOS7 App 前端框架
Framework7 是一个功能很全的 HTML 框架,用来构建 iOS7 应用程序. Framework7 允许您灵活搭建列表视图(表视图) .你可以让他们作为导航菜单,你可以在列表里面使用图标,输 ...
- HTML5 表单新增属性
1. 表单内元素的form属性 在H5中可以把form放到页面的任何地方,然后为该元素指定一个form属性,属性值为该表单的id,这样就可以声明该元素从属于指定表单了 <form id=&quo ...
- JavaScript学习笔记-JSON对象
JSON 是一种用来序列化对象.数组.数值.字符串.布尔值和 null 的语法.它基于 JavaScript 语法,但是又有区别:一些 JavaScript 值不是 JSON,而某些 JSON 不是 ...
- .Net框架2.0和4.0版本对比
.Net版本 2.0 SP2 4.0 操作系统 Windows 2000 SP4以上 Windows XP SP3以上 安装包大小 NetFx20SP2_x86.exe 23.8 MBNetFx20S ...
- SharePoint 2013 操作文档库ECB菜单
在SharePoint的使用中,我们经常需要定制SharePoint的一系列菜单,这里就包括ECB菜单,下面,我们简单了解一下ECB菜单如何定制,以及原理. 1.正常情况文档库的ECB菜单如下图: 2 ...