Bonjour,
Je dois updater un champ d'une table
première méthode :
sachant que c1,c2 n'est pas indexée
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)
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ésJ'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.
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
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]
Partager