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 :
Le varchar(7) est malheureusement imposé.
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]
Voici la requête
Voyez vous un moyen d'améliorer cette requete ?
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
Merci à tous
Partager