Bonjour,

Je tente de faire un DELETE massif de 82000 rows d'une table, sur un champ qui est INDEXE.

J'ai effectué plusieurs fois le même test, sur la même table, avec les mêmes données, pour être certain que la différence ne venait pas d'une charge différente de la machine à plusieurs moments, mais le résultat est toujours le même :

1) Via FORMS :

13:28:33 - del_imgext(253,OUI) BEGIN
13:29:23 - 82000 valeur image deleted
13:29:24 - 1 image deleted
13:29:24 - del_imgext(253,OUI) END

Donc environ 50 secondes...

2) Via PL/SQL sous Toad :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
BEGIN
  DBMS_OUTPUT.put_line (TO_CHAR (SYSDATE, 'hh24:mi:ss'));
  mgckgimgext.del_imgext (253, 'OUI');
  DBMS_OUTPUT.put_line (TO_CHAR (SYSDATE, 'hh24:mi:ss'));
END;
14:03:08
14:03:48


Soit environ 40 secondes...

3) DELETE Direct en PL/SQL sous Toad :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
BEGIN
  DBMS_OUTPUT.put_line (TO_CHAR (SYSDATE, 'hh24:mi:ss'));
  DELETE FROM valeur_image
        WHERE idtimgext = 253;
  DBMS_OUTPUT.put_line (TO_CHAR (SYSDATE, 'hh24:mi:ss'));
END;
14:05:08
14:05:49

Soit environ 40 secondes...

4) DELETE Direct en SQL sous Toad :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
DELETE FROM valeur_image
        WHERE idtimgext = 253;
Environ 18 secondes...


Donc 1 (50") > 2 (40") = 3 (40") > 4 (18")

On passe presque du simple au triple entre 1 et 4 ...

Si quelqu'un a une idée.... Moi je perds mon latin...

Merci!