xRo*_*bot 3 mysql database benchmarking
我有2张桌子:
拥有 3 百万行的作者。
预订 20 英里的行。
.
所以我用连接对这个查询进行了基准测试:
SELECT BENCHMARK(100000000, 'SELECT book.title, author.name
FROM `book` , `author` WHERE book.id = author.book_id ')
Run Code Online (Sandbox Code Playgroud)
这是结果:
查询耗时 0.7438 秒
使用连接进行 1 亿次查询仅需要 0.7438 秒???
我犯了一些错误还是这是正确的结果?
你的结果闻起来不对,我刚刚检查了文档并运行了我自己的一些基准测试。你实际上并没有对任何东西进行基准测试。
BENCHMARK() 用于测试标量表达式,而不是用于测试查询运行时。查询实际上并没有被执行。在我自己的查询测试中,所用的持续时间与查询的复杂性完全无关,只与要运行的试验数量有关。
看看http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_benchmark
来自文档的一些引用:
“BENCHMARK() 用于测量标量表达式的运行时性能,”
"只能使用标量表达式。虽然表达式可以是子查询,但它必须返回单列,最多单行。例如,如果表 t 有 BENCHMARK(10, (SELECT * FROM t)) 将失败不止一列或不止一行。”
除了绝对大多数查询计划人员的时间之外,您实际上并没有测量任何东西。
如果您想运行基准测试,则可能值得从应用程序代码中执行此操作(并且可能使用无缓存指令,具体取决于您的生产环境的写入量。)。从应用程序代码执行此操作还将计算水合数据的时间,以及通过线路发送数据的成本等。