MySQL的BENCHMARK()函数的Postgres等效函数

omhiaaxx  于 2023-01-25  发布在  Mysql
关注(0)|答案(3)|浏览(129)

我正在使用Postgresql。我想测试一个函数执行需要多少时间。由于这个函数只需要几毫秒,我想在一个循环中调用它1000s次来得到一个准确的数字。
MySQL有一个BENCHMARK()函数可以做到这一点。是否有等效的函数,或者我必须编写一个带循环的过程来做到这一点?

vmdwslir

vmdwslir1#

在PostgreSQL中,通常使用generate_series执行此操作:

SELECT my_function()
FROM generate_series(1,5000);

SELECT (SELECT my_query ....)
FROM generate_series(1,5000);

在后一种情况下,您可以将OFFSET 0添加到子查询中,或者将其 Package 在STRICT SQL函数中,以防止查询计划器提取公共条件和子子句,或者使用其他聪明的方法。
可以使用psql的\timing命令、SET log_duration = on命令或EXPLAIN (ANALYZE, BUFFERS)命令来获得定时,所有这些命令的定时都有细微的不同-请参阅文档。\timing测量时间,包括往返和到客户端的值传输。log_duration测量服务器端执行时间。EXPLAIN (ANALYZE, BUFFERS)测量语句的详细信息'S的执行,但是增加了定时开销,这会使其稍微慢下来。

bhmjp9jg

bhmjp9jg2#

写一个循环的过程-不应该超过5分钟。

ki1q1bka

ki1q1bka3#

类似SELECT my_function() FROM generate_series(1,5000);的查询被 Package 到函数benchmark()

相关问题