Mientras observa un plan de ejecución real, muestra índices faltantes a pesar de que la consulta tarda menos de 1 segundo.
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
El plan de ejecución muestra:
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[Account] ([IsMaster],[BeginDate])
INCLUDE ([AccountID],[Name])
¿Necesitamos crear el índice aunque la consulta solo tome 1 segundo? ¿Sobre qué base se debe crear un índice?
Voy a ejecutar esta consulta como un trabajo diario.
Respuestas:
No necesita agregar el índice en este momento. Todo el mensaje de "índice faltante" significa que esto podría ser útil. Puede que no sea sinceramente, o puede haber un índice que ayude aún más.
En cuanto a si es necesario agregar el nuevo índice? Bueno, digamos que tiene 100 filas en la tabla de la cuenta, pero todavía no está en uso. En un par de meses, tiene hasta 10,000 filas y la consulta ahora demora media hora o más. En ese punto, podría considerar agregar el índice. Y cuando digo considerar, me refiero a probarlo en un entorno de prueba y ver si realmente mejora las cosas.
Otras consideraciones incluyen:
fuente