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

Sybase Discussion :

[ASE] Procèdure trop longue


Sujet :

Sybase

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 12
    Points : 10
    Points
    10
    Par défaut [ASE] Procèdure trop longue
    Bonjour,

    je débute dans les bases de données et encore plus sur SYBASE.

    Voici une partie de ma procédure

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    create table #LISTE_CLIENTS
    	(
    		CLI_ID 			numeric(16),
    		CLI_ORIGINE 		char(1),
    		ANNEE			int,
    		MOIS			int,
    		PGE_Q_LBL_PRODUIT	varchar(32),
    		PSU_CODE		char(4),
    		FTP_CODE		char(4),
    		FAC_CA	money,
    		FAC_VOL	numeric(30,2)
    	)
    	create index PK_MKT_LISTE_CLIENTS_id1 on #LISTE_CLIENTS (CLI_ID)
    	create index PK_MKT_LISTE_CLIENTS_id2 on #LISTE_CLIENTS (CLI_ORIGINE)
    	create index PK_MKT_EFFEC_PREC_id3 on #EFFEC_PREC (FTP_CODE)
    	create index PK_MKT_EFFEC_PREC_id4 on #EFFEC_PREC (PSU_CODE)
     
    	Insert into #LISTE_CLIENTS
    	select 
    		distinct 
    		T1.CLI_ID,
    		T1.CLI_ORIGINE,
    		T2.FAC_ANNEE,
    		T2.FAC_MOIS,
    		case when T3.PGE_Q_LBL_PRODUIT is NULL or T3.PGE_Q_LBL_PRODUIT='' then "NON IDENTIFIE" else T3.PGE_Q_LBL_PRODUIT end,
    		case when T3.PSU_CODE is NULL or T3.PSU_CODE='' then "N.I" else T3.PSU_CODE end,
    		case when T3.FTP_CODE is NULL or T3.FTP_CODE='' then "N.I" else T3.FTP_CODE end,
    		sum(T2.FAC_CA),
    		sum(T2.FAC_VOL)
    	from 
    		dm_Horus_exp.dbo.MS_CLIENT T1,
    		dm_Horus_exp.dbo.MS_FACTURE T2,
    		dm_Horus_exp.dbo.MS_PRESTATION T3,
    		dm_Horus_exp.dbo.MS_FAC_PRESTA T4
    	where
    		T3.PSU_CODE in ('THEM','GEO','CFCA','CCBK','CTIN','CSIM','CNET','CSOF','COPT','CCSC','AFFI','CPL','CPL2','FGPP') or T3.FTP_CODE in ('ADR','MAIL','GEO')	
    	                and T1.CLI_ID=T2.CLI_ID
    		and T2.FAC_NO=T4.FAC_NO
    		and T4.PGE_ID=T3.PGE_ID
    		and datepart(yy, T2.FAC_DATE)=2006
    		--and datepart(yy, T2.CTR_DATE_DISTRI_FIN)=@AnneeRef
    	group by T1.CLI_ID, T1.CLI_ORIGINE, T2.FAC_ANNEE, T2.FAC_MOIS, T3.FTP_CODE, T3.PGE_Q_LBL_PRODUIT, T3.PSU_CODE
    Ma proc marchait très bien, mais depuis que j'ai rajouté cette close dans le where

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T3.PSU_CODE in ('THEM','GEO','CFCA','CCBK','CTIN','CSIM','CNET','CSOF','COPT','CCSC','AFFI','CPL','CPL2','FGPP') or T3.FTP_CODE in ('ADR','MAIL','GEO')
    Elle n'en finit pas, j'ai pourtant rajouté les indexs sur PSU_CODE et FTP_CODE mais rien n'y fait.

    Quelqu'un a t'il une solution pour un débutant qui galère ?

    Merci d'avance.

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Les pb d'optimisation de requete sont toujours difficiles à traiter sans avoir un certain nombre d'info sur les données elle meme mais en voyant ta requete j'ai l'impression qu'il y a un truc qui cloche:

    L'abscence de parenthèses autour des 2 termes du "OR", il se peut que tu fasse un gros produit cartésien masqué par le "distinct" du select....

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut Re: [ASE] Procèdure trop longue
    Citation Envoyé par Benjamin78
    Ma proc marchait très bien, mais depuis que j'ai rajouté cette close dans le where

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T3.PSU_CODE in ('THEM','GEO','CFCA','CCBK','CTIN','CSIM','CNET','CSOF','COPT','CCSC','AFFI','CPL','CPL2','FGPP') or T3.FTP_CODE in ('ADR','MAIL','GEO')
    Elle n'en finit pas, j'ai pourtant rajouté les indexs sur PSU_CODE et FTP_CODE mais rien n'y fait.
    Dans l'état ta clause additionelle va prendre TOUS les enregistrements qui match le FTP_CODE dans (ADR, MAIL, GEO). Il manque évidemment des parenthèses pour que le OR soit traité correctement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    and (
      T3.PSU_CODE in ('THEM','GEO','CFCA','CCBK','CTIN','CSIM','CNET','CSOF','COPT','CCSC','AFFI','CPL','CPL2','FGPP') or T3.FTP_CODE in ('ADR','MAIL','GEO')
    )
    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

Discussions similaires

  1. stopper un appel à un procédure trop longue
    Par nicnoc dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/07/2010, 16h27
  2. [XL-2007] Procédure trop longue
    Par presser dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/06/2009, 18h52
  3. Une procédure trop longue
    Par lola06 dans le forum VBA Access
    Réponses: 2
    Dernier message: 15/05/2007, 14h02
  4. [Vba access 97] Procédure trop longue
    Par saufffy dans le forum Access
    Réponses: 6
    Dernier message: 26/02/2007, 10h40
  5. [ASE][T-SQL]Procédure trop longue
    Par Benjamin78 dans le forum Sybase
    Réponses: 5
    Dernier message: 21/03/2006, 12h25

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