我有两张桌子:
作者有3百万行。
预订20英里的行。
所以我用连接对此查询进行了基准测试:
SELECT BENCHMARK(100000000, 'SELECT book.title, author.name
FROM `book` , `author` WHERE book.id = author.book_id ')
这就是结果:
查询耗时0.7438秒
对于带有连接的1亿次查询,只有0.7438秒
我是否犯了一些错误,或者这是正确的结果?
答案 0 :(得分:3)
你的结果有点不对劲,我只是运行检查文档并运行我自己的一些基准测试。你实际上并没有对任何事情进行基准测试。
BENCHMARK()用于测试标量表达式,它不用于测试查询运行时。查询实际上并未执行。在我自己的查询测试中,持续时间与查询的复杂性无关,只与要运行的试验数量有关。
查看http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_benchmark
来自doc的一些引用:
“BENCHMARK()用于测量标量表达式的运行时性能,” p>
“只能使用标量表达式。虽然表达式可以是子查询,但它必须返回单个列,最多只返回一行。例如,如果BENCHMARK(10,(SELECT * FROM t))将失败表t有多个列或多行。“
你实际上并没有在查询规划者的绝对时间之外进行任何测量。
如果你想运行基准测试,可能值得从应用程序代码中做到这一点(并且可能使用无缓存指令,具体取决于你的prod环境的写入程度如何)。从应用程序代码执行此操作还将考虑到水合数据的时间,以及通过电线等发送数据的成本。