Bonjour,

Habituée d'Oracle, je découvre SQL-Server.
J'ai un modèle en étoile avec un table de fait d'environ 20 millions d'enregistrements et une centaine de colonnes qui sont des id de tables de référence. Ces tables de référence contiennent entre 2 et 10 enregistrements.
Je construit une requête du type :
Requête 1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Select TR1.libelle, 
         TR2.libelle, 
         count(distinct TF.PrimaryKeyId)
FROM TF 
INNER JOIN TR1 ON (TF.TR1_ID=TR1.TR1_ID)
INNER JOIN TR2 ON (TF.TR2_ID=TR2.TR2_ID)
WHERE TF.TR3_ID=1
GROUP BY TR1.libelle, 
         TR2.libelle;
Requête 2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
Select TR1.libelle, 
         TR2.libelle, 
         TR4.libelle, 
         count(distinct TF.PrimaryKeyId)
FROM TF 
INNER JOIN TR1 ON (TF.TR1_ID=TR1.TR1_ID)
INNER JOIN TR2 ON (TF.TR2_ID=TR2.TR2_ID)
INNER JOIN TR4 ON (TF.TR4_ID=TR4.TR4_ID)
WHERE TF.TR3_ID=1
GROUP BY TR1.libelle, 
         TR2.libelle, 
         TR4.libelle;
A chaque libelle de table de référence que j'ajoute dans ma requête, il s'ajoute 2mn30 au temps d'exécution.
Ainsi la requête 2 met 2mn30 de plus que la requête 1.

Dans Oracle, l'ajout de libellés de tables de référence dans le SELECT n'a aucune influence sur les temps d'exécution ?! Donc je cherche à comprendre pourquoi c'est différent sous SQL-Server.

J'ai testé la requête sans jointure et les performances sont bonnes.
Ce sont donc les jointures avec les tables de référence de qqs lignes qui ralentissent fortement le temps d'exécution.
Pouvez-vous m'expliquer pourquoi ? Et comment faire pour que ce ne soit pas le cas ?

Avec mes remerciements,
Pitchoonet