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

PL/SQL Oracle Discussion :

Performances : SQL vs PL/SQL


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut Performances : SQL vs PL/SQL
    En ce qui concerne la performance, il est préférable d'utiliser l'instruction if-then-else ou la clause where ?
    Merci pour votre reponse

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ça dépend.

  3. #3
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Une clause where peut servir à filtrer des données lors de l'accès alors qu'une condition pl/sql va lire toutes les données pour les filtrer ensuite. Donc la réponse serait en faveur du where.
    Cordialement,
    Franck.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut
    Je comprends que la clause where charge la mémoire avec les données filtrées tandis que l'instruction if-then else charge la mémoire avec toutes les données, c'est vrai?
    Donc, le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select 
      case when x > 3 then 'ok'
           else 'not ok'
      end action;	
    for r in c loop 
    update.. set.. where.. and  r.action = 'ok'
    est meilleur que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select 
      case when x > 3 then 'ok'
           else 'not ok'
      end action;
    for r in c loop 
    if r.action = 'ok'
    update.. set.. where..
    Merci,
    blackangel

  5. #5
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    select
    case when x > 3 then 'ok'
    else 'not ok'
    end action;
    for r in c loop
    update.. set.. where.. and r.action = 'ok'
     
    est meilleure que :
     
    select
    case when x > 3 then 'ok'
    else 'not ok'
    end action;
    for r in c loop
    if r.action = 'ok'
    update.. set.. where..



    Et dans ton deuxième cas tu mets quoi dans la clause WHERE à ton avis ???
    J'ai pas l'impression que tu aies compris ta propre question !

    La différence porte sur un exemple tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FOR i IN 
      (SELECT col1, col2
      FROM ma_table)
      LOOP
     
      IF (Col2 = 0) THEN
        UPDATE ..
      END IF;
    Et celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    FOR i IN 
      (SELECT col1, col2
      FROM ma_table
      WHERE Col2 = 0)
      LOOP
     
      UPDATE ..
    Le 2eme sera plus performant car le nombre de lignes sélectionnées est conditionné par la clause WHERE, en résulte (normalement) un nombre de lignes moindre à traiter

  6. #6
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut
    La situation exacte est le suivante :

    j'ai créé une table log :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create table log as
    SELECT
    case when date > trunc(sysdate-20) then 'ok'
    else 'not ok'
    end action, *
    from table_y
    Je veux faire update sur la table_y en fonction de chaque cas ( et puis faire update sur log pour voir les cas traités avec succès ou échec).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for r in (select * from log) loop
    if r.action = 'ok'
    update table_y set.. where..
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for r in (select * from log) loop
    update.. set.. where.. and r.action = 'ok'
    Je voudrais savoir si le 2eme est plus performant

Discussions similaires

  1. Mauvaise performance avec Linq to sql
    Par Wasrack dans le forum Linq
    Réponses: 2
    Dernier message: 30/09/2009, 08h45
  2. Question sur les performance d'une transaction SQL
    Par SlashEne dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 24/04/2008, 22h41
  3. Performances temps d'insertions sql server
    Par KRis dans le forum Bases de données
    Réponses: 5
    Dernier message: 24/04/2008, 19h17
  4. Performance Hibernate vs PL-SQL.
    Par sqlbases dans le forum Hibernate
    Réponses: 4
    Dernier message: 22/05/2007, 10h00

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