Исках да сравня средното време на изпълнение на две функции в MySQL -
Квадратно разстояние: pow(x1 - x2, 2) + pow(y1 - y2, 2) + pow(z1 - z2, 2)
vs
Точка продукт: 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 пъти и в двете функции, така че времето за изпълнение всъщност не прави разлика)
Редактиране:
Разбира се, мога да създам временна таблица, би било малко неудобно, да я попълня с произволни стойности, което отново не е ясно (вижте Как попълвам mysql таблица с много произволни числа) и след това продължете със сравняването на моите функции.
Исках да знам дали съществува по-добър начин в MySQL.