J'ai une requête de mise à jour qui renvoie l'ID des lignes mises à jour. Le temps d'exécution de la requête est d'environ 90 secondes. Lorsque je supprime la clause Returning, le temps d'exécution est de 1 ms. La table update_table contient 39000 lignes. La requête met à jour 0 ligne dans ce cas. Quand on met à jour 3 lignes, le temps d'exécution est le même.
DECLARE
type intTable IS TABLE OF INTEGER;
idCol intTable;
BEGIN
UPDATE
update_table
SET
prop1 = 3, prop2 = NULL
WHERE EXISTS (
SELECT null FROM update_table f
INNER JOIN rel_table1 u ON f.ID= u.ID
INNER JOIN rel_table2 VP ON f.another_ID = VP.another_ID
WHERE (u.prop1 = 3)
AND VP.prop1 = 1
AND (u.prop2 = 75)
AND f.ID = update_table.ID
)
ReTURNING ID BULK COLLECT INTO idCol;
.
.
.
END;
Pourquoi la clause de retour ralentit-elle les requêtes ?