私はPostgresqlを使用しています。関数の実行にかかる時間をテストしたいと思います。この関数は数ミリ秒しかかからないので、正確な数値を取得するために、何千回もループで呼び出したいと思います。
MySQLには、これを行うためのBENCHMARK()関数があります。同等のものはありますか、それともこれを行うためにループ付きのプロシージャを作成する必要がありますか?
私はPostgresqlを使用しています。関数の実行にかかる時間をテストしたいと思います。この関数は数ミリ秒しかかからないので、正確な数値を取得するために、何千回もループで呼び出したいと思います。
MySQLには、これを行うためのBENCHMARK()関数があります。同等のものはありますか、それともこれを行うためにループ付きのプロシージャを作成する必要がありますか?
PostgreSQL では、通常、次のようにしてこれを行いgenerate_series
ます。
SELECT my_function()
FROM generate_series(1,5000);
また
SELECT (SELECT my_query ....)
FROM generate_series(1,5000);
後者の場合OFFSET 0
、サブクエリに追加するか、SQL 関数でラップしてSTRICT
、クエリ プランナーが共通の条件やサブ句を引き出したり、そうでなければ巧妙になったりするのを防ぐことができます。
\timing
タイミングは、psql のコマンド、 with SET log_duration = on
、または withで取得できますがEXPLAIN (ANALYZE, BUFFERS)
、いずれも微妙に異なります。ドキュメントを参照してください。簡単に言えば\timing
、クライアントへの往復と値の転送を含む時間を測定します。log_duration
サーバー側の実行時間を測定します。EXPLAIN (ANALYZE, BUFFERS)
ステートメントの実行の詳細を測定しますが、タイミングのオーバーヘッドが追加されるため、少し遅くなる可能性があります。
ループを使用してプロシージャを記述します。5分以上かかることはありません。