Ao examinar um plano de execução real, ele mostra os índices ausentes, apesar de a consulta levar 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
O plano de execução está mostrando:
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[Account] ([IsMaster],[BeginDate])
INCLUDE ([AccountID],[Name])
Precisamos criar o índice mesmo que a consulta demore apenas 1 segundo? Em que base um índice deve ser criado?
Vou executar esta consulta como um trabalho diário.
Respostas:
Você não precisa adicionar o índice no momento. Toda a mensagem "índice ausente" significa que isso pode ser útil. Pode não ser sincero, ou pode haver um índice que ajude ainda mais.
Quanto a quando você precisa adicionar o novo índice? Bem, digamos que você tenha 100 linhas na tabela da conta, mas ainda não está em uso. Em alguns meses, você terá até 10.000 linhas e a consulta agora levará meia hora ou mais. Nesse ponto, você pode considerar adicionar o índice. E quando digo considerar, quero dizer testá-lo em um ambiente de teste e ver se ele realmente melhora as coisas.
Outras considerações incluem:
fonte