MySQL有一个内置的BENCHMARK()函数,可以测试某些特定操作的执行速度。

BENCHMARK(count,expr)

BENCHMARK会重复计算expr表达式count次,通过这种方式就可以评估出mysql执行这个expr表达式的效率。这个函数的返回值始终是0,但可以根据客户端提示的执行时间来得到BENCHMARK总共执行的所消耗的时间,如以下这个例子

mysql> SELECT BENCHMARK(1000000,ENCODE('hello','goodbye'));
+----------------------------------------------+
| BENCHMARK(1000000,ENCODE('hello','goodbye')) |
+----------------------------------------------+
| 0 |
+----------------------------------------------+
1 row in set (4.74 sec)

上面例子中的4.74 秒指的是在mysql客户端总共消耗的时间。

BENCHMARK函数只能测量数字表达式(scalar expression)的性能,虽然说表达式可以是一个子查询,但子查询返回的只能是单个值。在BENCHMARK(10, (SELECT * FROM t)) 这个语句中,如果t表有多列或是t表中记录多于1行的话这个函数就会执行失败。BENCHMARK函数在执行多次的过程中sql的解析(parser)、优化(optimizer)、锁表(table locking)等操作只会进行一次,只有运行评估(runtime evaluation)会执行count次。 利用BENCHMARK,mysql就可以自动为我们多次执行表达式计算,从而获取比较平均的计算结果。

下面是对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 不能用来完成一种实际的基准测试。

如果我想比较 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秒

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

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

MYSQL BENCHMARK()函数的更多相关文章

  1. MYSQL BENCHMARK函数的使用

    MYSQL BENCHMARK函数是最重要的函数之一,下文对该函数的使用进行了详尽的分析,如果您对此感兴趣的话,不妨一看. 下文为您介绍的是MYSQL BENCHMARK函数的语法,及一些MYSQL  ...

  2. mysql常用函数参考

    mysql常用函数参考   对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL, ...

  3. MySql常用函数全部汇总

    MySQL数据库中提供了很丰富的函数.MySQL函数包括数学函数.字符串函数.日期和时间函数.条件判断函数.系统信息函数.加密函数.格式化函数等.通过这些函数,可以简化用户的操作.例如,字符串连接函数 ...

  4. [转]mysql常用函数

    转自:http://sjolzy.cn/Common-functions-mysql.html 控制流函数 IFNULL(expr1,expr2) 如果expr1不是NULL,IFNULL()返回ex ...

  5. MySql常用函数大全

    MySql常用函数大全 MySQL数据库中提供了很丰富的函数.MySQL函数包括数学函数.字符串函数.日期和时间函数.条件判断函数.系统信息函数.加密函数.格式化函数等.通过这些函数,可以简化用户的操 ...

  6. mysql 自定义函数

    原文:http://www.cnblogs.com/zhangminghui/p/4113160.html 引言 MySQL本身提供了内置函数,这些函数的存在给我们日常的开发和数据操作带来了很大的便利 ...

  7. mysql 日期函数总结

    1.0 格式化:DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据. 语法 DATE_FORMAT(date,format) date 参数是合法的日期.format 规定日期/时间的 ...

  8. MySQL concat函数的使用

    MySQL concat函数是MySQL数据库中众多的函数之一,下文将对MySQL concat函数的语法和使用进行说明,供您参考和学习. MySQL concat函数使用方法:CONCAT(str1 ...

  9. MySQL replace函数替换字符串语句的用法(mysql字符串替换)

    MySQL replace函数我们经常用到,下面就为您详细介绍MySQL replace函数的用法,希望对您学习MySQL replace函数方面能有所启迪. 最近在研究CMS,在数据转换的时候需要用 ...

随机推荐

  1. 各种排序算法-用Python实现

    冒泡排序 # 冒泡排序 def bubble_sort(l): length = len(l) # 外层循环 length遍,内层循环少一遍 while length: for j in range( ...

  2. Openfire部署和配置说明

    一.程序部署 1.1 程序和脚本 将文件拷贝到对应目录下,文件包括:Openfire.tar和setup.sh脚本.Openfire.tar为可执行文件库.配置等的压缩包,setup.sh为解压和部署 ...

  3. CentOS 安装 Zabbix

    一.安装 centos7 网易下载 http://mirrors.163.com/centos/7.2.1511/isos/x86_64/CentOS-7-x86_64-DVD-1511.torren ...

  4. Apache与Tomcat三种连接方式JK、http_proxy、ajp_proxy

    为什么要让Apache与Tomcat之间进行连接?事实上Tomcat本身已经提供了HTTP服务,该服务默认的端口是8080,也可以改为80.既然Tomcat本身已经可以提供动态加静态web服务,为什么 ...

  5. 【bzoj1258】三角形tri[CQOI2007](乱搞)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1258 这是道很意思的大水题,虽然看上去一脸懵逼,但画张图出来看看也可以窥见一丝端倪. ...

  6. uvalive 6938 区间dp

    看到n范围和给的区间看着就像区间dp 然后怎么cmp感觉都没法进行区间合并 n的300误导了下 没有注意离散化之后对时间可以dp 然而这个dp感觉不太经得起证明的样子... dp[i][j] -> ...

  7. windows DPAPI加密解密学习

    #include "stdafx.h" #include <windows.h> #include <Wincrypt.h> #include <io ...

  8. ubuntu安装Qt5

    1.ubuntu 10.04 desktop amd64 问题: 1.1. 没有GLIBCXX_3.4.15版本,或是更高的版本 http://blog.chinaunix.net/uid-91530 ...

  9. 《Advanced Bash-scripting Guide》学习(十二):占位符":"及其他

    本文所选的例子来自于<Advanced Bash-scripting Gudie>一书,译者 杨春敏 黄毅 : 在一个二元命令中提供一个占位符 例1. : ${username=`whoa ...

  10. Git之(一)Git是什么[转]

    为什么使用Git 孔子曾经曰过的,名正则言顺 言顺则事成. 我们在学习一项新技术之前,弄清楚为什么要学它至关重要,至于为什么要学习Git,我用一段if-else语句告诉你原因: if(你相信我){ 我 ...