Bonjour,

Je dois updater un champ d'une table

première méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
update table
set c0='Y'
where (c1,c2) IN (requete de sélection)
sachant que c1,c2 n'est pas indexée

seconde méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
cursor curs is
	select table.champs indexés, 
	(requete de sélection) tmp
	where jointure entre table et tmp sur des champs non indexés
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
puis boucle sur le cursor
	update table
	set c0='Y'
where valeur indexée
J'espère que j'ai été clair. Dans la première méthode je n'ai pas de code PL/SQL, par contre le moteur Oracle va devoir chercher ses tuples sans utiliser d'index.
Dans le second code je commence par une jointure, sur des champs non indexés mais ensuite je recherche les tuples via un index.
Dans la mesure où les performances sont rarement linéaires je vous donne quelques chiffres :
nombre d'enregistrements à updater :
1,2 M pour une table de 10 M de tuples et 3,3 M pour une table de 36 M de tuples.

J'aurais tendance à dire que la première solution est la plus rapide mais je n'en suis pas non plus absolument persuadé, d'autre part la seconde solution me permet de monitorer mon traitement donc si l'écart de performace est trop faible, ça peut rester la "meilleure" solution.


Merci d'avance de vos réponses.

Pierre

[Modération, Orafrance : Pensez à utiliser la balise [CODE] qui améliore la lisibilité, merci]