Nous avons une table Transactional Media contenant une clé primaire en cluster de 4 colonnes. RevenueCentreID, DateOfSale, MediaItemID et SaleTypeID. Il contient également une colonne de quantité et une colonne de montant.Index de couverture ou index individuels
La plupart de nos requêtes sélectionneront Centres de chiffre d'affaires pour une plage de dates pour un certain élément multimédia. Nous n'utilisons presque jamais le SaleTypeID. Serait-il préférable de créer un index sur RevenueCentreID, DateOfSale, MediaItemID ou un indice de couverture sur ces trois colonnes? Les numéros RevenueCentreID et RevenueCentreID sont respectivement des clés étrangères d'une table RevenueCentres Table et de MediaItems. Ils seront presque toujours joints à lors de l'exécution des requêtes.
Une requête typique ressemble à quelque chose comme celui ci-dessous:
Select
RevenueCentreID,
MediaItemID,
DateOfSale,
SUM(Quantity)Quantity,
SUM(Amount)Amount
From
Media m
Inner Join RevenueCentres rc on m.RevenueCentreID = rc.RevenueCentreID
Inner Join MediaItems mi on m.MediaItemID = mi.MediaItemID
Inner Join MediaCategories mc on mi.MediaCategoryID = mc.MediaCategoryID
Where
rc.ProfitCentreID = 1
And mc.MediaCategoryID = 1
And (DateOfSale Between '20090713' and '20090719')
Group By
DateOfSale,
RevenueCentreID,
MediaItemID
Toutes les suggestions seraient appréciés ...
Toutes mes excuses, oui il est serveur SQL 2005. Serait-il possible de savoir à quel serveur SQL ferait si, pour des arguments, j'ai eu un index séparé de la RevenueCentreID et sur DateOfSale. Je cours une requête qui utilise seulement le RevenueCentreID et le DateOfSale. Pourrait-il choisir un index dit RevenueCentreID, trouver les RevenueCentres, puis passer à la clé primaire pour obtenir les dates et vice versa. Sinon, il utiliserait le premier index pour obtenir RevenueCentres, puis utiliser le second pour obtenir les dates, puis passer à la clé primaire. Ou je suppose qu'il pourrait même simplement utiliser la clé primaire. – MarcoF
Vous pouvez voir ce que fait exactement SQL Server dans SQL Server Mgmt Studio lorsque vous activez l'option "Requête/Inclure le plan d'exécution réel" et exécutez la requête en question. Il vous montrera exactement quels indices sont utilisés (ou ignorés) –