mysql 预处理效率_MySQL中Stmt 预处理提高效率问题的小研究

复制代码 代码如下:DELIMITER $$

set @stmt = 'select userid,username from myuser where userid between ? and ?';

prepare s1 from @stmt;

set @s1 = 2;

set @s2 = 100;

execute s1 using @s1,@s2;

deallocate prepare s1;

$$

DELIMITER ;

用这种形式写的查询,可以随意替换参数,给出代码的人称之为预处理,我想这个应该就是MySQL中的变量绑定吧……但是,在查资料的过程中我却听到了两种声音,一种是,MySQL中有类似Oracle变量绑定的写法,但没有其实际作用,也就是只能方便编写,不能提高效率,这种说法在几个09年的帖子中看到:

http://www.itpub.net/thread-1210292-1-1.html

http://cuda.itpub.net/redirect.php?fid=73&tid=1210572&goto=nextnewset

另一种说法是MySQL中的变量绑定是能确实提高效率的,这个是希望有的,那到底有木有,还是自己去试验下吧。

试验是在本机进行的,数据量比较小,具体数字并不具有实际意义,但是,能用来说明一些问题,数据库版本是mysql-5.1.57-win32免安装版。

本着对数据库不是很熟悉的态度^_^,试验过程中走了不少弯路,此文以结论为主,就不列出实验的设计过程,文笔不好,文章写得有点枯燥,写出来是希望有人来拍砖,因为我得出的结论是:预处理在有没有cache的情况下的执行效率都不及直接执行…… 我对自己的实验结果不愿接受。。如果说预处理只为了规范下Query,使cache命中率提高的话个人觉得大材小用了,希望有比较了解的人能指出事实究竟是什么样子的——NewSilen

实验准备

第一个文件NormalQuery.sql

复制代码 代码如下:Set profiling=1;

Select * From MyTable where DictID = 100601000004;

Select DictID from MyTable limit 1,100;

Select DictID from MyTable limit 2,100;

/*从limit 1,100 到limit 100,100 此处省略重复代码*/

......

Select DictID from MyTable limit 100,100;

SELECT query_id,seq,STATE,10000*DURATION FROM information_schema.profiling INTO OUTFILE 'd:/NormalResults.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY 'n';

第二个sql文件 StmtQuery.sql

复制代码 代码如下:Set profiling=1;

Select * From MyTable where DictID = 100601000004;

set @stmt = 'Select DictID from MyTable limit ?,?';

prepare s1 from @stmt;

set @s = 100;

set @s1 = 101;

set @s2 = 102;

......

set @s100 =200;

execute s1 using @s1,@s;

execute s1 using @s2,@s;

......

execute s1 using @s100,@s;

SELECT query_id,seq,STATE,10000*DURATION FROM information_schema.profiling INTO OUTFILE 'd:/StmtResults.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY 'n';

做几点小说明:

1. Set profiling=1; 执行此语句之后,可以从information_schema.profiling这张表中读出语句执行的详细信息,其实包含不少内容,包括我需要的时间信息,这是张临时表,每新开一个会话都要重新设置profiling属性才能从这张表中读取数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值