对许多PostgreSQL查询进行基准测试

Nil*_*ing 1 postgresql psql postgresql-9.3

在复杂的网页上,执行了超过一百个查询.我搜索一种方法来对这些查询进行基准测试.我试图将EXPLAIN ANALYZE嵌入到查询中.进入psql函数,选择每个查询的执行时间并进行比较.但EXPLAIN ANALYZE似乎无法以任何方式嵌入.

是否有另一种解决方案来比较某些查询的执行时间?

非常感谢

Lau*_*lbe 8

EXPLAIN在PL/pgSQL中嵌入没有问题:

CREATE OR REPLACE FUNCTION profile(
      IN query text,
      OUT total_cost double precision,
      OUT runtime double precision
   ) RETURNS record
  LANGUAGE plpgsql STRICT AS
$$DECLARE
   j json;
BEGIN
   EXECUTE 'EXPLAIN (ANALYZE, FORMAT JSON) ' || query INTO j;
   total_cost := (j->0->'Plan'->>'Total Cost')::double precision;
   runtime := (j->0->'Plan'->>'Actual Total Time')::double precision;
   RETURN;
END;$$;
Run Code Online (Sandbox Code Playgroud)

您可以使用它,例如如下:

test=> SELECT * FROM profile($$SELECT * FROM large WHERE val = 'mama'$$);
????????????????????????
? total_cost ? runtime ?
????????????????????????
?   14542.43 ? 207.836 ?
????????????????????????
(1 row)
Run Code Online (Sandbox Code Playgroud)

不要将它与不受信任的查询一起使用,因为该函数容易受到SQL注入的攻击.