Tout en regardant un plan d'exécution réel, il montre des index manquants même si la requête prend moins d'une seconde.
SELECT
Account.AccountID,
Account.Name
FROM
account
LEFT OUTER JOIN accountfeaturesetting afs
ON afs.accountid = account.accountid
and afs.featureid = 'Schedules'
and
afs.settingid = 'EditReasons'
WHERE
ISNULL(afs.Value, '0') = '0'
AND EXISTS
(SELECT 1 FROM program WHERE program.AccountID = account.AccountID
AND program.Active = 1
AND (program.ScheduleEditReasonFlags <> 0
OR program.ScheduleEditReasonFields <> 0))
AND account.IsMaster = 0
AND account.BeginDate IS NOT NULL
Le plan d'exécution montre:
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[Account] ([IsMaster],[BeginDate])
INCLUDE ([AccountID],[Name])
Avons-nous besoin de créer l'index même si la requête ne prend qu'une seconde? Sur quelle base un indice doit-il être créé?
Je vais exécuter cette requête comme un travail quotidien.
Réponses:
Vous n'avez pas besoin d'ajouter l'index pour le moment. Tout le message "index manquant" signifie que cela pourrait être utile. Ce n'est peut-être pas honnêtement, ou il peut y avoir un indice qui aide encore plus.
Quant à savoir quand vous devez ajouter le nouvel index? Supposons que vous ayez 100 lignes dans le tableau des comptes, mais qu'elles ne sont pas encore vraiment utilisées. En quelques mois, vous avez jusqu'à 10 000 lignes et la requête prend maintenant une demi-heure ou plus. À ce stade, vous pourriez envisager d'ajouter l'index. Et quand je dis considérer, je veux dire le tester dans un environnement de test et voir si cela améliore réellement les choses.
D'autres considérations incluent:
la source