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