Plano de execução mostrando o índice ausente, mas a consulta é rápida

8

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.

somu
fonte
11
Um segundo é rápido o suficiente?
Erik Darling
Está demorando menos de 1 segundo
somu 27/03
4
Ok ... isso é rápido o suficiente?
Erik Darling
Eu acho que sim seu rápido que conta tabela tem 900 conta rows.and featuresetting tem 21385 linhas
Somu
11
Eu diria que adicione mais linhas como 100x mais do que você realmente tem em um banco de dados de teste e publique o plano de execução real. Poste-o novamente depois de adicionar este índice e você verá e saberá por que outras pessoas recomendariam ou não aplicar esse índice.
Magier 27/03

Respostas:

15

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:

  • Quantos índices eu já tenho nesta tabela? Se você tiver mais de 10 índices, eu ficaria mais preocupado do que se você dissesse 2.
  • Quão importante é essa consulta? Você diz que está executando todas as noites. Em um segundo, tudo bem (supondo que você execute apenas uma vez). Se, por outro lado, faz parte de um processo e é executado milhares de vezes por noite, pode ser mais um problema. Se chegar a um ponto em que está demorando o suficiente para causar problemas (causando problemas com outro processo ou ocorrendo momentos em que os usuários estão no sistema etc.), é necessário analisar o desempenho e adicionar índices.
Kenneth Fisher
fonte
Também vale a pena perguntar quantas contas você espera ter. Se você está recebendo pedidos de aviões a jato, pode não ter uma base de clientes tão grande, mas se for um site de mídia social, seu principal objetivo é levar esse número aos milhões o mais rápido possível. Mais uma coisa: em alguns casos, eu preferiria fazer o índice agora, para não precisar procurar o que está tornando o aplicativo lento um ano depois, quando o número de contas decolar por algum motivo.
msouth