我有 2 个表:
拥有 300 万行的作者。
预订 20 英里的行。
.
所以我用一个连接对这个查询进行了基准测试:
SELECT BENCHMARK(100000000, 'SELECT book.title, author.name
FROM `book` , `author` WHERE book.id = author.book_id ')
这是结果:
查询耗时 0.7438 秒
1 亿个带有连接的查询仅需 0.7438 秒 ???
我是犯了一些错误还是这是正确的结果?
最佳答案
你的结果闻起来不对,我刚刚检查了文档并运行了一些我自己的基准测试。你实际上并没有对任何东西进行基准测试。
BENCHMARK() 用于测试标量表达式,而不是用于测试查询运行时。查询实际上并没有被执行。在我自己的查询测试中,所用的持续时间与查询的复杂性完全无关,只与要运行的试验量有关。
看看http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_benchmark
文档中的一些引述:
“BENCHMARK() 旨在测量标量表达式的运行时性能,”p>
“只能使用标量表达式。虽然表达式可以是子查询,但它必须返回单列且最多返回一行。例如,BENCHMARK(10, (SELECT * FROM t)) 如果表 t 有不止一列或不止一行。”
您实际上并没有测量任何东西,除了绝对大部分的查询规划器时间之外。
如果你想运行基准测试,可能值得从应用程序代码中进行(并且可能使用 no cache 指令,具体取决于你的生产环境的写入量。)。从应用程序代码执行此操作还将计算水合数据的时间,以及通过网络发送数据等的成本。
关于mysql - Mysql 中的基准函数(令人难以置信的结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2752833/