[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倍近く時間がかかることがわかります。
引数によっても変わってきそうですが、この方法である程度のオーバーヘッドを把握することができます。