jeudi 11 octobre 2012

TRUNCATE TABLE ORACLE VS DELETE

La commande DELETE permet d'effacer des enregistrements d'une table. Cette opération peut être lente s'il y a un très grand nombre d'enregistrement au niveau de la table. À chaque opération, on met à jour les enregistrements UNDO ainsi que les enregistrements REDO LOGS.

Il est possible de revenir en arrière pour récupérer des données en cas de l'effacement avec un ROLLBACK.

L'ordre TRUNCATE permet de supprimer toutes les lignes d'une table. Ce n'est pas un ordre du LMD mais un ordre du LDD donc cela signifie qu'il déclenche un COMMIT implicite. Il n'est pas possible de récupérer les données après un TRUNCATE donc il faut l'utiliser avec précaution.
Cette opération est très rapide même s'il y a un très grand nombre d'enregistrements au niveau de la table. On ne génère pas ni UNDO, ni REDO LOGS.

Attention, pas de rollback possible avec la commande Oracle Truncate Table.


En terme de performance, le TRUNCATE est plus rapide que le DELETE. Le système effectue moins de manipulation interne avec un TRUNCATE (pas de passage par le cache, journalisation moindre....).

En revanche s'il existe des clés étrangères, le TRUNCATE ne fonctionnera pas. Il faut également avoir des droits importants pour utiliser le TRUNCATE. Pour plus de détails avec des exemples, visiter mon site web qui sera accessible dans quelques mois à cette url: www.oraweb.ca

Aucun commentaire:

Enregistrer un commentaire