IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Choix de la méthode d'update la plus performante


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Juillet 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 7
    Par défaut Choix de la méthode d'update la plus performante
    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]

  2. #2
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Par défaut
    De manière générale, quand on peut écrire en une requête SQL la même chose qu'en un bloc PL/SQL, la requête est sensée être plus rapide car lors de l'exécution du bloc PL/SQL, Oracle switche du moteur PL/SQL vers le moteur SQL lors de l'exécution de chaque requête SQL.


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  3. #3
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Un SGBD étant par définition ensembliste, il est dés lors très logique qu'un traitement de l'ensemble sera plus performant qu'un traitement unitaire.

    En un mot : il vaut mieux traiter une fois X lignes que X fois une ligne

    en revanche, peut-être que si le curseur est créé avec la clause FOR UPDATE les perfs seront similaires... mais bon, ccomme le dit laly, ce qui peut être fait en SQL ne doit pas être codé en PL/SQL

  4. #4
    Membre habitué
    Inscrit en
    Juillet 2003
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 7
    Par défaut
    Merci pour vos réponses.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Polymorphisme - choix de la méthode
    Par Roy Miro dans le forum Langage
    Réponses: 5
    Dernier message: 23/06/2007, 17h18
  2. Mémoriser du texte | Choix de la méthode
    Par madnux dans le forum C++Builder
    Réponses: 9
    Dernier message: 16/05/2007, 14h31
  3. Réponses: 11
    Dernier message: 22/03/2007, 16h45
  4. Méthode de dessin la plus rapide ?
    Par tnarol dans le forum DirectX
    Réponses: 10
    Dernier message: 05/10/2006, 15h02
  5. [Compilation] Choix d'une méthode d'analyse
    Par GrandFather dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 10/10/2005, 08h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo