Optimiser une requete SQL et la DB
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:
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:
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