Beim Betrachten eines tatsächlichen Ausführungsplans werden fehlende Indizes angezeigt, obwohl die Abfrage weniger als 1 Sekunde dauert.
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
Der Ausführungsplan zeigt:
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[Account] ([IsMaster],[BeginDate])
INCLUDE ([AccountID],[Name])
Müssen wir den Index erstellen, obwohl die Abfrage nur 1 Sekunde dauert? Auf welcher Basis soll ein Index erstellt werden?
Ich werde diese Abfrage als täglichen Job ausführen.
Antworten:
Sie müssen den Index jetzt nicht hinzufügen. Die Meldung "Fehlender Index" bedeutet lediglich, dass dies hilfreich sein kann. Es könnte nicht ehrlich sein, oder es könnte einen Index geben, der noch mehr hilft.
Was , wenn Sie benötigen den neuen Index hinzufügen? Nehmen wir an, Sie haben 100 Zeilen in der Kontotabelle, aber sie wird noch nicht wirklich verwendet. In ein paar Monaten sind Sie bis zu 10.000 Zeilen und die Abfrage dauert jetzt eine halbe Stunde oder länger. An diesem Punkt können Sie den Index hinzufügen. Und wenn ich überlege, meine ich, teste es in einer Testumgebung und schau, ob es tatsächlich die Dinge verbessert.
Weitere Überlegungen umfassen:
quelle