Mysql benchmark 的使用

  1.   select   语句来查看sql 语句执行的时间  

       我一直使用mysql 图形化工具来操作数据库,查看某条SQL 语句执行的时间也是通过图形化工具来查看。前两天遇到了一个问题,就是       怎   么样查看一个mysql执行一个sql 表达式所需的时间,也就是执行  where 条件的时间,通过 例如我想知道

   

        to_days(MYDATE) - to_days(now()) <1   执行一次的时间   其中 MYDATE 是数据表中的一个时间戳字段。

        如果单纯的用  select     to_days(MYDATE) - to_days(now()) <1     大概是0.0011秒

 

   2.  benchmark  使用方法:

 

          这里还有一种方法能够获取到 mysql 执行一个sql 语句或sql 表达式的 时间,并且可以由用户指定执行次数。通过执行大规模次数,         才能够获得比较稳定的 sql 执行时间。

 

            select   benchmark(num, exp) ;   其中 num 为执行次数,exp 为希望获得执行时间的表达式 ,不包括 sql 语句

 

 

 

            select benchmark(1, to_days(2011-04-07) - to_days(now()) <1 );   执行时间大概是 0.0011秒 ,可以计算表达式时间

 

            select benchmark(1, select * from MYTABLE  limit 0,40 );   Mysql  报错,说明EXP 不能为sql 语句,只能为表达式或函数

 

          下面是对num 赋予不同的数值,查看执行不同次数所耗费的时间

 

           select benchmark(100, to_days(2011-04-07) - to_days(now()) <1 );     执行时间大概也是 0.0012秒

           select benchmark(10000, to_days(2011-04-07) - to_days(now()) <1 );     执行时间大概也是 0.0056秒

           select benchmark(1000000, to_days(2011-04-07) - to_days(now()) <1 );     执行时间大概也是 0.4454秒

 

 

          为什么执行100次和执行 1次的时间耗费差不多呢? 这是因为可能被注入了缓存的缘故,因此benchmark 不能用来完成一种实际的      基准测试。

 

 

   3.   使用benchmark 进行执行速度比较

 

     如果我想比较      2011-01-01>'date("Y-m-d",time())      和    to_days(2011-04-07) - to_days(now()) <1  两个表达式中哪    个表达式执行速度更快怎么办?

                  select  to_days(2011-01-01)-to_days(now())<1     执行时间大概也是 0.0011秒

 

                  select 2011-01-01>'date("Y-m-d",time())'               执行时间大概也是 0.0011秒

 

           通过这种方式是无法比较的。

 

          select benchmark(1,  2011-01-01>'date("Y-m-d",time())')          执行时间大概也是 0.0011秒

           select benchmark(1, to_days(2011-04-07) - to_days(now()) <1 );     执行时间大概也是 0.0011秒

 

       通过这种方式也无法比较,但是我们知道,mysql 使用内置函数肯定是要耗费一定的时间的,也就是   第二个表达式比第一个表达式执行速度更慢。

 

 

 

           但在某些场合,还是可以比较两种表达式的执行速度的:

 

               select benchmark(1,  2011-01-01>'date("Y-m-d",time())')          执行时间大概也是 0.0011秒

               select benchmark(100,  2011-01-01>'date("Y-m-d",time())')          执行时间大概也是 0.0011秒

               select benchmark(10000,  2011-01-01>'date("Y-m-d",time())')          执行时间大概也是 0.0013秒

               select benchmark(1,  2011-01-01>'date("Y-m-d",time())')          执行时间大概也是 0.0249秒

 

 

 

 

 

 

       通过上面的比较发现         2011-01-01>'date("Y-m-d",time())      和    to_days(2011-04-07) - to_days(now()) <1

       在大数据量比较时执行速度更快。

       在实际的web 网页应用中也证实了这一点。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值