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 :

Question sur performance vues,requetes


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut Question sur performance vues,requetes
    Bonsoir à tous,

    Voici 6 tables qui pourront être jointe par des PK et des FK dans une requête.
    Tantôt on a besoin que de joindre TABLE1 et TABLE2 tantôt quatre tables ou les six tables. On extrait des informations de TABLE6 et peut-être qu'en même temps on a besoin d'une information de TABLE1 ou de TABLE2 enfin bref.
    Ce que je souhaiterais savoir, c'est, afin de réduire le nombre de requête ne serait-il pas plus approprié d'élaborer une vue joignant les 6 tables ou même plus ? :


    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
    17
    18
    19
     
    CREATE VIEW vwListe(
        CHAMP1,
        CHAMP2,
        CHAMP3,
        CHAMP4,
        CHAMP5,
        CHAMP6)
     
    AS
     
    SELECT T1.CHAMP1,T2.CHAMP2,T3.CHAMP3,T4.CHAMP4,T5.CHAMP5, T6.CHAMP6 FROM TABLE1 T1 
    INNER JOIN TABLE2 T2 ON T1.CHAMP1=T2.CHAMP2
    INNER JOIN TABLE3 T3 ON T2.CHAMP2=T3.CHAMP3
    INNER JOIN TABLE4 T4 ON T3.CHAMP3=T4.CHAMP4
    INNER JOIN TABLE5 T5 ON T4.CHAMP4=T5.CHAMP5
    INNER JOIN TABLE6 T6 ON T5.CHAMP5=T6.CHAMP6
    ...................................................................
    ...................................................................
    De laquelle on extrait les informations (et pas forçément toutes) au besoins :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT CHAMP1,CHAMP2 FROM vwListe

    au lieu de construire séparement :
    Requete_1=SELECT CHAMP1,CHAMP2 FROM TABLE1 INNER JOIN TABLE2
    Requete_2=SELECT CHAMP2,CHAMP3 FROM TABLE2 INNER JOIN TABLE3
    Requete_n=....................................

    Qu'en sera-t-il des performances si on fait appel tout le temps à cette vue au lieu de ces requêtes ?

    Merci pour vos informations.

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    compare les plans et les stats de lecture de tes requêtes tu auras vite la réponse

    qu'est ce qui est plus rapide pour chercher une bille bleue ?, chercher dans tous les sacs ou bien chercher seulement dans le sac des billes bleues ?

  3. #3
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut
    Merci Makowski

    Les plans ne sont pas les mêmes.......
    et bien sûr que c'est dans le sac bleu mais ..........., pour me faire une idée, je voudrais m'assurer sur les indicateurs des stats à prendre en considération sous IB Expert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ------ Performance info ------
    Prepare time = 15ms
    Execute time = 0ms
    Avg fetch time = 0,00 ms
    Current memory = 15 738 832
    Max memory = 16 956 804
    Memory buffers = 2 048
    Reads from disk to cache = 0
    Writes from cache to disk = 0
    Fetches from cache = 28
    Je suppose que c'est le Prepare et l'Execute time ?
    En terme de temps de préparation et de temps d'execution du plan de requête
    pour le renvoi de l'ensemble des données ?

    Merci.

  4. #4
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut
    Bonsoir,

    Je viens de trouver un thread :
    http://www.developpez.net/forums/d96...e/#post5411543
    traitant du même sujet que celui-ci. J'aimerais m'assurer que FB n'elimine pas les jointures inutiles
    dans une vue afin d'abandonner cette methode.

    J'ai fait deux tests sous IB Expert:

    1) pour une vue jointant 4 tables et avec un SELECT CHAMP FROM LA VUE
    ca donne comme stats :
    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
    17
     
    Plan
    PLAN JOIN (JOIN (JOIN (V_LIGNE_COMMANDE_CLIENT CD NATURAL, V_LIGNE_COMMANDE_CLIENT LC INDEX (FK_CDE_CLI)), V_LIGNE_COMMANDE_CLIENT LIGNE INDEX (PK_LIGNE)), V_LIGNE_COMMANDE_CLIENT AR INDEX (PK_ST_TB_ARTICLE))
     
    Adapted Plan
    PLAN JOIN (JOIN (JOIN (V_LIGNE_COMMANDE_CLIENT CD NATURAL, V_LIGNE_COMMANDE_CLIENT LC INDEX (FK_CDE_CLI)), V_LIGNE_COMMANDE_CLIENT LIGNE INDEX (PK_LIGNE)), V_LIGNE_COMMANDE_CLIENT AR INDEX (PK_ST_TB_ARTICLE))
     
    ------ Performance info ------
    Prepare time = 0ms
    Execute time = 0ms
    Avg fetch time = 0,00 ms
    Current memory = 9 573 220
    Max memory = 10 081 336
    Memory buffers = 2 048
    Reads from disk to cache = 0
    Writes from cache to disk = 0
    Fetches from cache = 39
    2) pour un select jointant 3 tables et avec un SELECT CHAMP FROM LES TABLES ca donne comme stats :
    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
    17
     
    Plan
    PLAN JOIN (CD NATURAL, LC INDEX (FK_CDE_CLI), LIGNE INDEX (PK_LIGNE))
     
    Adapted Plan
    PLAN JOIN (CD NATURAL, LC INDEX (FK_CDE_CLI), LIGNE INDEX (PK_LIGNE))
     
    ------ Performance info ------
    Prepare time = 0ms
    Execute time = 0ms
    Avg fetch time = 0,00 ms
    Current memory = 9 566 820
    Max memory = 10 081 336
    Memory buffers = 2 048
    Reads from disk to cache = 0
    Writes from cache to disk = 0
    Fetches from cache = 28
    Il me semble qu'il n' y a pas une grande différence entre les deux stats bien que les plans sont différents mais le problème c'est sans des données en production.

  5. #5
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    Avec la base employee il y a une vue PHONE_LIST qui lie les tables EMPLOYEE et DEPARTEMENT
    un SELECT * from PHONE_LIST donne 42 lectures de EMPLOYEE et 21 de DEPARTEMENT
    un SELECT EMP_NO FROM PHONE_LIST (donc en ne prenant qu'un champ de EMPLOYEE) idem

    et c'est logique et cohérent

    il faut bien respecter les demandes faites par les INNER JOIN que tu poses
    explicitement, cela fait partie des contraintes de recherche que tu poses

    ce n'est pas la même chose de dire que tu veux tous les enregistrement d'une table ou bien tous les enregistrement d'une table ayant une correspondance dans une seconde table.

  6. #6
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut
    Citation Envoyé par Makowski Voir le message
    et c'est logique et cohérent
    Oui c'est logique et cohérent. Dans les deux cas les plans ne bougent pas.
    Maintenant c'est clair.
    Merci à vous Makowski.

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

Discussions similaires

  1. Question sur une sous requete
    Par Jean-Pierre49 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 19/03/2008, 12h19
  2. [SSAS][2k5] question sur les vues
    Par geof dans le forum SSAS
    Réponses: 4
    Dernier message: 18/03/2008, 11h42
  3. question sur la vue v$datafile
    Par pascal_T dans le forum Administration
    Réponses: 5
    Dernier message: 11/04/2007, 13h39
  4. [Oracle 10g] Question sur les sous-requetes
    Par hotkebab99 dans le forum Oracle
    Réponses: 2
    Dernier message: 27/10/2006, 11h25

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