J'ai suivi les index non groupés pour la table serviceregistration
.
Index Name ---------------+ Column Name ----------------- + Index Type IX_SERVICEREGISTRATION_I | SERREGNO | NONCLUSTERED IX_SERVICEREGISTRATION_II | SERREGNO, SERCUSTID | NONCLUSTERED IX_SERVICEREGISTRATION_III| PLACEID, JOBID, SERREGNO | NONCLUSTERED
Requête 1:
Select CustomerName, Place From dbo.ServiceRegistration Where SERREGNO = 'JAN1234' And PLACEID = 1
Requête 2:
Select CustomerName, Place From dbo.ServiceRegistration Where SERREGNO = 'JAN1234' And SERCUSTID = 'A123'
Requête 3:
Select CustomerName, Place From dbo.ServiceRegistration Where JOBID = 5 And PLACEID = 1 And SERREGNO = 'JAN1234'
Si les index créés ci-dessus seront utiles pour ces requêtes ou non?
IX_SERVICEREGISTRATION_I
IX_SERVICEREGISTRATION_II
Tout index composé (composé de plusieurs colonnes) ne peut jamais être utilisé que si vous utilisez les n colonnes les plus à gauche dans vos requêtes – c'est pourquoi ni la requête # 1 ni la requête # 2 ne peuvent utiliser l'index # 3.
Mais l'utilisation réelle des indices dépendra de beaucoup plus de choses – comme combien de lignes sur l'set du tableau select-vous avec cette requête?
Aucune des requêtes n'est "couverte" par et index – par exemple, aucune requête ne peut returnner les valeurs que vous requestz en regardant simplement l'index – ce qui limite généralement l'utilité d'un index. Si vous ajoutez un INCLUDE (CustomerName, Place)
à l'un des index, la probabilité de leur utilisation sera considérablement améliorée.