[Tuning] truncate ou delete
Bonjour,
La version 10G de OEM (version Web) utilise différentes métriques pour mettre en évidence les 'instructions SQL les plus consommatrices de ressources'. Sur une de mes applications (en pro*C), cet outil met en évidence comme instruction un truncate.
Il s'agit de truncate d'une table d'une colonne dans laquelle je stocke temporairement quelques données (pas plus de 30). Le tout est dans une boucle qui peut s'exécuter plus milliers de fois.
Sachant que la table est très petite, je me demandais si un Delete * serait pas plus rapide qu'un truncate. Comme un truncate implique un commit, ce n'est peut être pas très efficace de faire tant de transaction ...
Comme un truncate est plus efficace qu'un delete * sur une grosse table, je me demandais si la réciproque était vraie ?
Avant de faire des tests concrets je voudrais avoir votre avis :wink:
Phig
Re: [Tuning] truncate ou delete
Citation:
Envoyé par phig
Comme un truncate implique un commit
euhh... non, il n'y a pas de commit avec un truncate ;)
Alors d'après le gourou j'ai nommé Tom Kyte ;) : le truncate est couteux donc pour les petits volumes c'est plus couteux que le delete même si celui-ci consomme du rollback et du redo. En plus, si il y a un lock sur la table le truncate foire immédiatement :?
Re: [Tuning] truncate ou delete
Salut Orafrance
Citation:
Envoyé par orafrance
euhh... non, il n'y a pas de commit avec un truncate ;)
Dans ma doc oracle je lis :
Citation:
Commit automatique : Exécution d'un ordre du LDD ou du LCD
et plus loin je lis encore
Citation:
Truncate table est un autre ordre LDD ... vous ne pouvez pas annuler un ordre truncate
J'ai pas compris un truc alors, car je pensais que si je faisais un truncate dans mon code ça impliquait alors un commit ...
Sinon merci pour l'info du fameux Tom, je vais appliquer ses conseils sur le champs.
Phig