PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Сравнителен анализ на много заявки на PostgreSQL

Няма проблем с вграждането на 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;$$;

Можете да го използвате например по следния начин:

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

Не я използвайте с ненадеждни заявки, тъй като функцията е уязвима за 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. Посочени са множество стойности по подразбиране за идентификатор на колона на таблицата

  2. C# се свързва с база данни на postgres

  3. Екраниране на специални знаци в to_tsquery

  4. Вземете дати от ден от седмицата в диапазон от дати

  5. Как да вмъкна в таблица от друга таблица чрез съпоставяне на стойности?