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'