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

SQL Firebird Discussion :

Code à optimiser


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut Code à optimiser
    Salut !

    mon 1er code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from tb_process
       inner join tb_step on (tb_process.code_step = tb_step.code_step)
       inner join tb_energie on (tb_step.code_step = tb_energie.code_step)
       inner join tb_unite on (tb_step.code_unite = tb_unite.code_unite)
       and (tb_process.date_bilan = tb_energie.date_mois)
     
    where 
       (
          ((tb_process.date_bilan between :date_debut and :date_fin) and
           (tb_energie.date_mois between :date_debut and :date_fin))
       )

    mon 2ème code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    from tb_process
       inner join tb_step on (tb_process.code_step = tb_step.code_step)
       inner join tb_energie on (tb_step.code_step = tb_energie.code_step)
       inner join tb_unite on (tb_step.code_unite = tb_unite.code_unite)
     
    where 
       (
          (  (tb_process.date_bilan = tb_energie.date_mois) and (tb_process.date_bilan between :date_debut and :date_fin) and
           (tb_energie.date_mois between :date_debut and :date_fin))
       )
    dans le 1er code la condition
    tb_process.date_bilan = tb_energie.date_mois
    est dans les jointures mais dans le second elle est dans la clause where.

    Le résultat obtenu est le même mais d'après vous quel est le code le plus optimisé point de vue rapidité puisque ma base de données est distante.

    Merci par avance.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut
    Selon mes connaissances empiriques et la logiques, les 2 codes sont corrects et auront le même "niveau" d’exécution.

    Penses à regarder les plans d'exécution généré, a priori ils devraient être identique.

    par contre, je modifierais la requête sous cette forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ....
    FROM tb_process
       INNER JOIN tb_step ON (tb_process.code_step = tb_step.code_step)
       INNER JOIN tb_energie ON (tb_step.code_step = tb_energie.code_step AND (tb_process.date_bilan = tb_energie.date_mois)
       INNER JOIN tb_unite ON (tb_step.code_unite = tb_unite.code_unite)
    WHERE 
       (
          ((tb_process.date_bilan BETWEEN :date_debut AND :date_fin) AND
           (tb_energie.date_mois BETWEEN :date_debut AND :date_fin))
       )
    et même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ....
    FROM tb_process
       INNER JOIN tb_step ON (tb_process.code_step = tb_step.code_step AND tb_process.date_bilan BETWEEN :date_debut AND :date_fin)
       INNER JOIN tb_energie ON (tb_step.code_step = tb_energie.code_step AND tb_process.date_bilan = tb_energie.date_mois AND tb_energie.date_mois BETWEEN :date_debut AND :date_fin)
       INNER JOIN tb_unite ON (tb_step.code_unite = tb_unite.code_unite)
    Là aussi la vitesse devrait être la même

  3. #3
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    Ok mais je crois qu'avec des tables énormes c'est mieux d'utiliser la 1ière forme.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Par défaut
    Je ne vois pas pourquoi, mais les super-experts de firebird devraient connaitre la réponse

    As tu regardé les plans d’exécution, à mon humble avis, ils doivent être identiques

  5. #5
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message
    Je ne vois pas pourquoi, mais les super-experts de firebird devraient connaitre la réponse

    As tu regardé les plans d’exécution, à mon humble avis, ils doivent être identiques
    Re,

    je viens de voir les plans pour les deux requêtes, ils sont identiques.

  6. #6
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut
    Peut aussi s'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ....
    FROM tb_process, tb_step, tb_energie, tb_unite
    Where
    tb_process.code_step = tb_step.code_step AND tb_process.date_bilan BETWEEN :date_debut AND :date_fin and tb_step.code_step = tb_energie.code_step AND tb_process.date_bilan = tb_energie.date_mois AND tb_energie.date_mois BETWEEN :date_debut AND :date_fin and tb_step.code_unite = tb_unite.code_unite
    D'un point de vue de la norme SQL, et pour faciliter la lecture des requetes SQL il est préférable de laisser dans le WHERE les critères de sélection et dans les jointures apres le ON uniquement ce qui sert à lier les tables (le plus souvent correspond aux clés étrangères liées aux clés primaires).

    Donc la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ....
    FROM tb_process
       INNER JOIN tb_step ON (tb_process.code_step = tb_step.code_step)
       INNER JOIN tb_energie ON (tb_step.code_step = tb_energie.code_step AND (tb_process.date_bilan = tb_energie.date_mois)
       INNER JOIN tb_unite ON (tb_step.code_unite = tb_unite.code_unite)
    WHERE 
       (
          ((tb_process.date_bilan BETWEEN :date_debut AND :date_fin) AND
           (tb_energie.date_mois BETWEEN :date_debut AND :date_fin))
    Est plus adaptée.

Discussions similaires

  1. [Python 3.X] explication code optimisation combinatoir
    Par kenzo1245 dans le forum Général Python
    Réponses: 4
    Dernier message: 27/08/2014, 22h52
  2. [Toutes versions] Code à optimiser
    Par BAHIRI dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 20/12/2009, 09h38
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

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