Syntax Error.

[Sy] MySQLで関数のオーバーヘッドを計る方法(benchmarkを使用)

2019/01/15

MySQL の関数を使う時に、その関数によって どのくらいのオーバーヘッドがかかるのか 気になる場合に使える方法です。


benchmark(回数, 式または関数) を使って「式または関数」の部分の処理にかかる時間を測定できる、ということを利用します。

ここに関数を入れることで、関数のオーバーヘッドを計ることができます。

例えば rand() を1億回実行したらどうなるか?を知りたいとします。

その場合は、このようなクエリを実行すればOKです。

mysql> select benchmark(100000000, rand());
+------------------------------+
| benchmark(100000000, rand()) |
+------------------------------+
|                            0 |
+------------------------------+
1 row in set (3.03 sec)

おー速いですね。次に文字列を連結する concat() を試してみます。

mysql> select benchmark(100000000, concat('a', 'b'));
+----------------------------------------+
| benchmark(100000000, concat('a', 'b')) |
+----------------------------------------+
|                                      0 |
+----------------------------------------+
1 row in set (14.66 sec)

rand() に比べて5倍近く時間がかかることがわかります。

引数によっても変わってきそうですが、この方法である程度のオーバーヘッドを把握することができます。