Bonjour à tous,

Voila je dois optimiser une requête SQL et éventuellement la base de donnée qui va avec sur un serveur SQL Server. En gros il s'agit d'une requête pour retrouver une hiérarchie dans un arbre et cette requête peut prendre plus de 15 secondes. Après de multiple recherche je bloque toujours.

En gros la structure de la table :

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
CREATE TABLE [dbo].[DEALER] (
	[D_DEALER] [decimal](6, 0) NOT NULL ,
	[D_LEVEL2] [varchar] (7)  NULL ,
	[D_LEVEL3] [varchar] (7)  NULL ,
	[D_LEVEL4] [varchar] (7)  NULL ,
	[D_LEVEL5] [varchar] (7)  NULL ,
	[D_LEVEL6] [varchar] (7)  NULL ,
	[D_LEVEL7] [varchar] (7)  NULL ,
	[D_LEVEL8] [varchar] (7)  NULL ,
	[D_BIRTHDAY] [varchar] (20)  NULL 
) ON [PRIMARY]
 
CREATE TABLE [dbo].[LEVELS_NAMES] (
	[LV_ID] [varchar] (7)  NULL ,
	[LV_PER] [varchar] (50)  NULL ,
	[LV_NAME] [varchar] (36) NULL 
) ON [PRIMARY]
Le varchar(7) est malheureusement imposé.

Voici la requête

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
SELECT D_LEVEL8,LV8.LV_NAME,D_LEVEL7,LV7.LV_NAME ,D_LEVEL6,LV6.LV_NAME ,D_LEVEL5,LV5.LV_NAME A,D_LEVEL3,LV3.LV_NAME 
FROM DEALER 
LEFT JOIN LEVELS_NAMES AS LV8 ON D_LEVEL8=LV8.LV_ID 
LEFT JOIN LEVELS_NAMES AS LV7 ON D_LEVEL7=LV7.LV_ID 
LEFT JOIN LEVELS_NAMES AS LV6 ON D_LEVEL6=LV6.LV_ID 
LEFT JOIN LEVELS_NAMES AS LV5 ON D_LEVEL5=LV5.LV_ID 
LEFT JOIN LEVELS_NAMES AS LV3 ON D_LEVEL3=LV3.LV_ID 
WHERE D_LEVEL8='80' AND D_BIRTHDAY!='' 
GROUP BY D_LEVEL8,LV8.LV_NAME,D_LEVEL7,LV7.LV_NAME,D_LEVEL6,LV6.LV_NAME,D_LEVEL5,LV5.LV_NAME,D_LEVEL3,LV3.LV_NAME ORDER BY D_LEVEL8,D_LEVEL7,D_LEVEL6,D_LEVEL5,D_LEVEL3
Voyez vous un moyen d'améliorer cette requete ?

Merci à tous