Hey All,
ich möchte testen ob ein Update mit “WITH … UPDATE” schneller ist als ein Update mit BEGIN UPDATE, UPDATE, … COMMIT"
Im ersten Fall schreibe ich einfach EXPLAIN ANALYZE WITH … UPDATE.
Kann ich ein EXPLAIN ANALYZE über mehere Queries durchführen??
Meep. Wenn man mehrere einzelne Statements zu einer Transaktion zusammenfaßt wird dies schneller gehen als wenn jedes einzelne Statement jeweils in seiner eigenen Transaktion läuft. Das könnte bei der Antwort von @castorp evtl. falsch rüber kommen.
Eine Bündelung via WITH könnte etwas geringe Planungszeiten haben, man muß aber aufpassen: WITH-Abfragen sind teilweise krasse Performance-Killer. Insbesondere in der Form: with x as (select <sehr große Datenmenge> select from x where … mit einer starken Where-Condition, wo nur noch wenige Datensätze übrig bleiben. Die Where-Condition SCHLÄGT NICHT auf die WITH-Abfrage durch (was bei einem Subselect passieren würde).
Ciatronical erwähnt “ein UPDATE” deswegen bin ich davon ausgegangen, dass es um den Unterschied zwischen:
update foo
set bar = 42
where ...;
und
begin;
update foo
set bar = 42
where ...;
commit;
geht.
Wenn natürlich in einer Transaktion mehrere UPDATEs (bzw. DML Statements) zusammengefasst werden, dann ja, dann ist das ziemlich sicher schneller als viele kleine Transaktionen.
Das ändert aber nichts an der Tatsache, dass EXPLAIN immer nur für ein Statement, nicht für mehrere Statements geht.