MariaDBでは、BENCHMARK() 式を指定された回数実行する組み込み関数です。
これを使用して、MariaDBが式を処理する速度を計測できます。
結果は常に0 。この関数は、クエリの実行時間を報告するmysqlコマンドラインツール内で使用することを目的としています。
構文
構文は次のようになります:
BENCHMARK(count,expr)
countの場所 exprが必要な回数です 実行します。
例1
デモンストレーションの例を次に示します。
SELECT BENCHMARK(2, SLEEP(2)); 結果:
+------------------------+ | BENCHMARK(2, SLEEP(2)) | +------------------------+ | 0 | +------------------------+ 1 row in set (4.015 sec)
予想通り、0 返されました。ただし、関心があるのはクエリの実行時間です。
ここでは、SLEEP()を使用しました 2秒間スリープする機能。この関数を単独で使用すると、通常、ステートメントの実行に約2秒かかります。
ただし、この場合、2を渡しました BENCHMARK()の最初の引数として 。そのため、SLEEP() 関数が2回実行され、BENCHMARK()が発生します 実行に約4秒かかる関数(正確には4.015秒)。
最初の引数を3に増やすとどうなりますか。 :
SELECT BENCHMARK(3, SLEEP(2)); 結果:
+------------------------+ | BENCHMARK(3, SLEEP(2)) | +------------------------+ | 0 | +------------------------+ 1 row in set (6.012 sec)
今回はSLEEP() 関数が3回実行されたため、BENCHMARK() 実行に6秒強かかりました。
例2
ENCODE()を使用する例を次に示します。 文字列(最初の引数)をパスワード(2番目の引数)でエンコードする関数:
SELECT BENCHMARK(100000, ENCODE('Homer', 'Symptom')); 結果:
+-----------------------------------------------+
| BENCHMARK(100000, ENCODE('Homer', 'Symptom')) |
+-----------------------------------------------+
| 0 |
+-----------------------------------------------+
1 row in set (0.016 sec) 操作が完了するまでに0.016秒かかったことがわかります。
最初の引数を100,000から1,000,000に増やして、それが実行時間にどのように影響するかを見てみましょう。
SELECT BENCHMARK(1000000, ENCODE('Homer', 'Symptom')); 結果:
+------------------------------------------------+
| BENCHMARK(1000000, ENCODE('Homer', 'Symptom')) |
+------------------------------------------------+
| 0 |
+------------------------------------------------+
1 row in set (0.118 sec) 今回は実行にかなり時間がかかりました。
ヌル引数
最初の引数がnullの場合 、次にnull 返されます:
SELECT BENCHMARK(null, ENCODE('Homer', 'Symptom')); 結果:
+---------------------------------------------+
| BENCHMARK(null, ENCODE('Homer', 'Symptom')) |
+---------------------------------------------+
| NULL |
+---------------------------------------------+
1 row in set (0.007 sec)
ただし、2番目の引数のみがnullの場合 、次に0 返されます:
SELECT BENCHMARK(100000, null); 結果:
+-------------------------+ | BENCHMARK(100000, null) | +-------------------------+ | 0 | +-------------------------+ 1 row in set (0.002 sec)
引数の数が無効です
BENCHMARK()を呼び出す 引数がない場合、または引数の数が間違っている場合、エラーが発生します:
SELECT BENCHMARK(); 結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'
そして:
SELECT BENCHMARK(1, 2, 3); 結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'BENCHMARK'