mysql - 如何比较 MySQL 中两个函数的平均运行时间?

标签 mysql optimization profiling query-optimization

我想比较 MySQL 中两个函数的平均运行时间 -

平方距离:pow(x1 - x2, 2) + pow(y1 - y2, 2) + pow(z1 - z2, 2)

对比

点积:x1 * x2 + y1 * y2 + z1 * z2

现在,无论我选择哪个函数,都将在单个查询中运行大约50,000,000,000 次!因此,即使运行时间上最微小的差异也很重要。

所以,我尝试了分析。这是我得到的,

mysql> show profiles;
+----------+------------+-----------------------------------------------------------------------+
| Query_ID | Duration   | Query                                                                 |
+----------+------------+-----------------------------------------------------------------------+
|        4 | 0.00014400 | select pow(rand()-rand(),2)+pow(rand()-rand(),2)+pow(rand()-rand(),2) |
|        5 | 0.00012800 | select pow(rand()-rand(),2)+pow(rand()-rand(),2)+pow(rand()-rand(),2) |
|        6 | 0.00017000 | select pow(rand()-rand(),2)+pow(rand()-rand(),2)+pow(rand()-rand(),2) |
|        7 | 0.00024800 | select pow(rand()-rand(),2)+pow(rand()-rand(),2)+pow(rand()-rand(),2) |
|        8 | 0.00014400 | select pow(rand()-rand(),2)+pow(rand()-rand(),2)+pow(rand()-rand(),2) |
|        9 | 0.00014000 | select pow(rand()-rand(),2)+pow(rand()-rand(),2)+pow(rand()-rand(),2) |
|       10 | 0.00014900 | select pow(rand()-rand(),2)+pow(rand()-rand(),2)+pow(rand()-rand(),2) |
|       11 | 0.00015000 | select rand()*rand()+rand()*rand()+rand()*rand()                      |
|       12 | 0.00012000 | select rand()*rand()+rand()*rand()+rand()*rand()                      |
|       13 | 0.00015200 | select rand()*rand()+rand()*rand()+rand()*rand()                      |
|       14 | 0.00022500 | select rand()*rand()+rand()*rand()+rand()*rand()                      |
|       15 | 0.00012700 | select rand()*rand()+rand()*rand()+rand()*rand()                      |
|       16 | 0.00013200 | select rand()*rand()+rand()*rand()+rand()*rand()                      |
|       17 | 0.00013400 | select rand()*rand()+rand()*rand()+rand()*rand()                      |
|       18 | 0.00013800 | select rand()*rand()+rand()*rand()+rand()*rand()                      |
+----------+------------+-----------------------------------------------------------------------+
15 rows in set, 1 warning (0.00 sec)

这根本没有多大帮助,运行时间波动很大,我不知道哪一个更快以及快了多少。

我需要运行每个函数大约 10,000 次才能获得良好且一致的平均运行时间。我如何在 MySQL 中实现这一点?

(请注意,rand() 在这两个函数中都被调用了 6 次,因此它的运行时并没有真正产生区别)

编辑:

当然,我可以创建一个临时表,这会有点不方便,用随机值填充它,这又不是直接的(请参阅 How do I populate a mysql table with many random numbers ),然后继续比较我的函数。

我想知道 MySQL 中是否存在更好的方法。

最佳答案

在最好的情况下,函数 pow 检测到指数是整数 2,并通过一次乘法执行求幂。它没有理由能够击败纯乘法。

关于mysql - 如何比较 MySQL 中两个函数的平均运行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26814953/

相关文章:

mysql - Node : MySQL returns inaccurate decimal values

python - Scrapy mysql管道错误

mysql - 如何查询以日期命名的一系列表

c++ - SSE 版本的不同结果

JavaScript Math.sqrt 性能

python - Beautifulsoup 与 lxml vs Beautifulsoup 3

php - 如何通过连接从两个表中获取数据

codeigniter - AngularJS 中的实时更新

arrays - Haskell 实时更新和查找性能

java - 优化基于网格的粒子系统