PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Analiza porównawcza wielu zapytań PostgreSQL

Nie ma problemu z osadzeniem EXPLAIN w 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;$$;

Możesz go użyć na przykład w następujący sposób:

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

Nie używaj go z niezaufanymi zapytaniami, ponieważ funkcja jest podatna na wstrzyknięcie SQL.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyświetl ostatnie dziecko w iteracji reakcji

  2. sortowanie postgreSQL ze znacznikami czasu

  3. Jak działa POSITION() w PostgreSQL

  4. plv8 wyłącza wykonanie i przygotowanie funkcji w eval()

  5. Jak Asind() działa w PostgreSQL