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

MS SQL Server Discussion :

temps qui croit beacoup a cause d'une jointure


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 53
    Par défaut temps qui croit beacoup a cause d'une jointure
    Bonjour tout le monde
    voila j'ai une très grande requête qui marche très bien et surtout met 10 secondes a s’exécuter. seulement dès qui je lui ajout la jointure suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INNER JOIN REGLE_DYNAMIQUE RD1 ON RD1.TYPE_IMPUTATION = 'volume' and RD1.regle_id = R.regle_id
    le temps d’exécution augmente beaucoup (18 minutes sont passé au moment de l'écriture de ces lignes)
    alors aidait moi svp

    voila la requete :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    SELECT cpr.cpf_cod,R.regle_id,affecter_us.section_numero,an.annuaire_id,((cast(fact.[VOL_FACTURE] as decimal(14,4))/(tab.somme_des_volume_ndi*ISNULL(tab2.nombre_section,1)))*lgf_mtht) as montant_impute_poste,lgf.oper_id,lgf.fct_num,lgf.lgf_num,/*an.annuaire_id,andi.ndi,*/fact.ndi_appelant,fact.[POSTE_APPELANT],u.utilisateur_nom,u.utilisateur_prenom--pos.poste_numero, u.utilisateur_id, cast(fact.[VOL_FACTURE] as decimal(10,2)) as V_Fact,(tab.somme_des_volume_ndi) as SumV_NDI, (tab2.nombre_section) as Nb_Sect, lgf_mtht, ((cast(fact.[VOL_FACTURE] as decimal(14,4))/(tab.somme_des_volume_ndi*ISNULL(tab2.nombre_section,1)))*lgf_mtht) as montant_impute_poste 
    FROM lgf
    INNER JOIN dbo.FCT ON dbo.FCT.CFA_COD = dbo.LGF.CFA_COD AND fct.FCT_NUM = LGF.FCT_NUM AND dbo.FCT.FCT_NUM = dbo.LGF.FCT_NUM AND dbo.FCT.OPER_ID = dbo.LGF.OPER_ID 
    INNER JOIN dbo.U_OPERATEUR ON dbo.U_OPERATEUR.OPER_ID = dbo.LGF.OPER_ID  
    LEFT JOIN dbo.OP_COMPTE_SERVICE_UTILISATEUR AS cs ON cs.CFA_COD = dbo.LGF.CFA_COD AND cs.FCT_NUM = dbo.LGF.FCT_NUM AND  cs.OPER_ID = dbo.LGF.OPER_ID AND cs.SOUS_COMPTE = dbo.LGF.CPR_COD 
    LEFT JOIN dbo.UN_SERVICE ON dbo.UN_SERVICE.SERVICE_ID = cs.SERVICE 
    LEFT JOIN dbo.UN_SOCIETE ON dbo.UN_SOCIETE.SOCIETE_ID = dbo.UN_SERVICE.SOCIETE_ID  
    LEFT JOIN dbo.UN_SOUS_ENTITE ON dbo.UN_SOUS_ENTITE.SOUS_ENTITE_ID = dbo.UN_SOCIETE.SOUS_ENTITE_ID  
    LEFT JOIN dbo.UN_ENTITE ON dbo.UN_ENTITE.ENTITE_ID = dbo.UN_SOUS_ENTITE.ENTITE_ID  
    INNER JOIN dbo.CPR ON dbo.CPR.CFA_COD = dbo.LGF.CFA_COD AND dbo.CPR.FCT_NUM = dbo.LGF.FCT_NUM AND dbo.CPR.CPR_COD = dbo.LGF.CPR_COD AND dbo.CPR.OPER_ID = dbo.LGF.OPER_ID 
    LEFT JOIN OP_TYPELIGNE_FACTURES o ON dbo.LGF.tch_cod=o.tch_cod and dbo.LGF.gam_cod = o.gam_cod and dbo.LGF.pft_cod = o.pft_cod and dbo.LGF.ttr_cod = o.ttr_cod and dbo.LGF.tus_cod = o.tus_cod   and dbo.LGF.oper_id = o.oper_id 
    LEFT JOIN dbo.TAR ON dbo.TAR.tar_cod = o.tar_cod  and dbo.LGF.tar_lib = dbo.TAR.tar_lib and dbo.TAR.tar_cod = o.tar_cod
    LEFT JOIN (select distinct * from U_PRODGEN_FAC) p ON o.prod_type = PRODGEN_FAC_ID  
    LEFT JOIN U_TYPECOMMGEN_FAC c ON comm_type = TYPECOMMGEN_FAC_ID  
    LEFT JOIN cpf ON cpr.cpf_cod = cpf.cpf_cod and cpr.fct_num = cpf.fct_num
    LEFT JOIN (select regle_id,regle_type,oper_id,cpf_cod,cpr_cod,tch_cod,gam_cod,pft_cod,ttr_cod,tus_cod,prodgen_id,commgen_id,entite_id,sous_entite_id,societe_id,service_id from regle) R ON cpf.cpf_cod like R.cpf_cod and LGF.cpr_cod like R.cpr_cod and LGF.tch_cod like R.tch_cod and LGF.gam_cod like R.gam_cod and LGF.pft_cod like R.pft_cod and LGF.ttr_cod like r.ttr_cod and LGF.tus_cod  like r.tus_cod and o.prod_type  like r.prodgen_id and   o.comm_type  like r.commgen_id  and  (un_entite.entite_id  like r.entite_id or un_entite.entite_id is null) and  (un_sous_entite.sous_entite_id  like r.sous_entite_id or un_sous_entite.sous_entite_id is null) and  (un_societe.societe_id  like r.societe_id or un_societe.societe_id is null)  and (un_service.service_id  like r.service_id or un_service.service_id is null) and cast(lgf.OPER_iD as varchar(20)) like r.oper_id and regle_type='Dynamique'
    INNER JOIN REGLE_DYNAMIQUE RD1 ON RD1.TYPE_IMPUTATION = 'volume' and RD1.regle_id = R.regle_id 
    LEFT join (SELECT  FACTURE_ID,ZONE_GEO_ID,[NDI_APPELANT],sum([VOL_FACTURE]) as vol_facture,[POSTE_APPELANT],compte   FROM U3_FLOISIRS10.dbo.OP_FACTURE_POSTE group by FACTURE_ID,ZONE_GEO_ID,[NDI_APPELANT],[POSTE_APPELANT],compte) fact on fact.compte = cpr.cpf_cod
    LEFT JOIN(select ndi_appelant,sum(vol_facture) as somme_des_volume_ndi from  U3_FLOISIRS10.dbo.OP_FACTURE_POSTE group by ndi_appelant) tab on tab.ndi_appelant = fact.ndi_appelant
    INNER JOIN ANNUAIRE_NDI andi ON fact.ndi_appelant = andi.ndi
    INNER JOIN ANNUAIRES an ON an.ANNUAIRE_ID = andi.ANNUAIRE_ID 
     
    LEFT join postes pos on an.annuaire_id = pos.annuaire_id and fact.poste_appelant = '0'+pos.poste_numero 
    LEFT JOIN AFFECTER_UTILISATEUR_POSTE affecter_up on affecter_up.poste_numero= pos.poste_numero
    LEFT JOIN utilisateurs u on affecter_up.utilisateur_id = u.utilisateur_id
    LEFT JOIN AFFECTER_UTILISATEUR_SECTION affecter_us on affecter_us.utilisateur_id = u.utilisateur_id
    LEFT JOIN SECTIONS s on affecter_us.section_numero=s.section_numero and s.annuaire_id = an.annuaire_id
    LEFT JOIN (SELECT u.utilisateur_id, count(section_numero) as nombre_section FROM [UNIDB_FLOISIRS10].[dbo].[UTILISATEURS] u ,dbo.AFFECTER_UTILISATEUR_SECTION us where u.utilisateur_id = us. utilisateur_id   group by u.utilisateur_id) tab2 on tab2.utilisateur_id =  u.utilisateur_id
    LEFT JOIN unitic.dbo.OP_ZONE_GEO op_zone on fact.ZONE_GEO_ID = op_zone.ZONE_GEO_ID

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Sans :

    - La structure de la table REGLE_DYNAMIQUE et ses index
    - Le plan de requête (CTRL + M avant exécution de la requête)

    Impossible de vous aider.

    @++

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/10/2013, 11h50
  2. [MySQL] Solution à une jointure qui consomme du temps et de la mémoire
    Par randriano dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 16/10/2012, 11h26
  3. temps qui passe à partir d'une date connue
    Par Invité dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/09/2009, 21h40
  4. Code qui se répète à cause d'une instruction d'impression delphi
    Par makaphrodite dans le forum Autres outils décisionnels
    Réponses: 7
    Dernier message: 22/01/2009, 11h00
  5. Code qui se répète a cause d'une instruction d'impression
    Par makaphrodite dans le forum Langage
    Réponses: 9
    Dernier message: 18/11/2008, 15h43

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