Précédent   Forum des professionnels en informatique > Bases de données > Sybase
Sybase Forum sur la base de données Sybase. Avant de poster -> F.A.Q Sybase, Tutoriels Sybase
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/03/2006, 10h14   #1
Invité de passage
 
Inscription : mars 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 12
Points : 2
Points : 2
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 :
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 :
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.
Benjamin78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2006, 15h43   #2
Membre Expert
 
Inscription : avril 2006
Messages : 1 024
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 024
Points : 1 175
Points : 1 175
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....
remi4444 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 10h01   #3
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
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 :
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 :
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
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h51.


 
 
 
 
Partenaires

Hébergement Web