MYSQL的BENCHMARK函数
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就可以自动为我们多次执行表达式计算,从而获取比较平均的计算结果。
参考资源
MySQL的benchmark函数
http://dev.mysql.com/doc/refman/5.1/en/information-functions.html#function_benchmark
