Bonjour,

Je travaille sur une base SqlServer 2008 de 2 Go dont la table principale contient 2 millions de ligne.
Lorsque je fais une requete j'ai des temps exécrable mais en transformant ma requete en sous requete, c'est plutot honorable.
J'imagine bien que sans la base il va être difficile de m'aider mais je tente quand meme. Donc voici ma requete lente (schématisée bien sur)

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
 SELECT
 DISTINCT 
TABLE1.15_champs,
TABLE2.6_champs,
TABLE3.3_champs
TABLE4.1_champ
FROM 
TABLE1  
 INNER JOIN TABLE_DE_JOINTURE_1
 INNER JOIN TABLE_DE_JOINTURE_2 
 INNER JOIN TABLE_2
 INNER JOIN TABLE_3
LEFT JOIN TABLE_DE_JOINTURE_3
LEFT JOIN TABLE_DE_JOINTURE_4
INNER JOIN TABLE_DE_JOINTURE_5
INNER JOIN TABLE_4
ca c'est tres lent mais quand je fait

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
 SELECT
 
TABLE1.15_champs,
TABLE2.6_champs,
TABLE3.3_champs
TABLE4.1_champ
FROM 
(select DISTINCT TABLE1.ID FROM 
TABLE1  
 INNER JOIN TABLE_DE_JOINTURE_1
 INNER JOIN TABLE_DE_JOINTURE_2 
 INNER JOIN TABLE_2
 INNER JOIN TABLE_3
LEFT JOIN TABLE_DE_JOINTURE_3
LEFT JOIN TABLE_DE_JOINTURE_4
INNER JOIN TABLE_DE_JOINTURE_5
INNER JOIN TABLE_4) AS T1 ON T1.ID = TABLE1.ID
 INNER JOIN TABLE_2
 INNER JOIN TABLE_3
INNER JOIN TABLE_4
c'est beaucoup plus rapide. Est ce que quelqu'un peut m'expliquer le pourquoi ?

Si j'avais de l'argent je me paierais bien un audit de Fred Brouard mais en attendant ce jour je dois bien me débrouiller.

merci de votre aide