Mysql中的基准功能(难以置信的结果)

时间:2010-05-02 08:12:51

标签: mysql database benchmarking

我有两张桌子:

作者有3百万行。

预订20英里的行。

所以我用连接对此查询进行了基准测试:

SELECT BENCHMARK(100000000, 'SELECT book.title, author.name
FROM `book` , `author` WHERE book.id = author.book_id ')

这就是结果:

查询耗时0.7438秒

对于带有连接的1亿次查询,只有0.7438秒

我是否犯了一些错误,或者这是正确的结果?

1 个答案:

答案 0 :(得分:3)

你的结果有点不对劲,我只是运行检查文档并运行我自己的一些基准测试。你实际上并没有对任何事情进行基准测试。

BENCHMARK()用于测试标量表达式,它不用于测试查询运行时。查询实际上并未执行。在我自己的查询测试中,持续时间与查询的复杂性无关,只与要运行的试验数量有关。

查看http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_benchmark

来自doc的一些引用:

“BENCHMARK()用于测量标量表达式的运行时性能,”

“只能使用标量表达式。虽然表达式可以是子查询,但它必须返回单个列,最多只返回一行。例如,如果BENCHMARK(10,(SELECT * FROM t))将失败表t有多个列或多行。“

你实际上并没有在查询规划者的绝对时间之外进行任何测量。

如果你想运行基准测试,可能值得从应用程序代码中做到这一点(并且可能使用无缓存指令,具体取决于你的prod环境的写入程度如何)。从应用程序代码执行此操作还将考虑到水合数据的时间,以及通过电线等发送数据的成本。