sql >> Database teknologi >  >> RDS >> PostgreSQL

Benchmarking af mange PostgreSQL-forespørgsler

Der er intet problem med at indlejre EXPLAIN i 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;$$;

Du kan f.eks. bruge det som følger:

test=> SELECT * FROM profile($$SELECT * FROM large WHERE val = 'mama'$$);
┌────────────┬─────────┐
│ total_cost │ runtime │
├────────────┼─────────┤
│   14542.43 │ 207.836 │
└────────────┴─────────┘
(1 row)

Brug det ikke med upålidelige forespørgsler, da funktionen er sårbar over for SQL-injektion.




  1. Tuning af SQL-forespørgsel i Oracle

  2. Hvordan bygger man et simpelt anmeldelses- og 5-stjernet ratingsystem?

  3. C# Hvordan analyserer man en datostreng i et vilkårligt specificeret Oracle-datoformat?

  4. Kan ikke konvertere værdien '2012-04-05 10:20:00' fra kolonne XX til TIMESTAMP