1

私はPostgresqlを使用しています。関数の実行にかかる時間をテストしたいと思います。この関数は数ミリ秒しかかからないので、正確な数値を取得するために、何千回もループで呼び出したいと思います。

MySQLには、これを行うためのBENCHMARK()関数があります。同等のものはありますか、それともこれを行うためにループ付きのプロシージャを作成する必要がありますか?

4

3 に答える 3

3

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)ステートメントの実行の詳細を測定しますが、タイミングのオーバーヘッドが追加されるため、少し遅くなる可能性があります。

于 2012-10-20T16:24:06.133 に答える
2

ループを使用してプロシージャを記述します。5分以上かかることはありません。

于 2012-10-20T09:15:27.147 に答える