mysql - Mysql 中的基准函数(令人难以置信的结果)

标签 mysql database benchmarking

我有 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() 旨在测量标量表达式的运行时性能,”

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

您实际上并没有测量任何东西,除了绝对大部分的查询规划器时间之外。

如果你想运行基准测试,可能值得从应用程序代码中进行(并且可能使用 no cache 指令,具体取决于你的生产环境的写入量。)。从应用程序代码执行此操作还将计算水合数据的时间,以及通过网络发送数据等的成本。

关于mysql - Mysql 中的基准函数(令人难以置信的结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2752833/

相关文章:

mysql - 如何在mysql中使用另一个表的列来填充列

数据库架构 - 预订/可用性系统

java - 如何在 android 中使用 Log.d 设置断点

database - 使用 CouchDB 的复合键,查找多条记录

php - 使用 php 的选择标签形式从一个表中选择并将其插入到另一个表中

PHP 脚本在 ö/é 上崩溃

php - MySQL 存储过程和准备语句的性能比较

performance - 如何有效利用 channel

java - 为什么 JMH 运行不同的 fork ?

c# - 逐字节比较文件还是读取所有字节?