Optimisation de requête sous SQL Server
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:
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:
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