Ao testar procedimentos armazenados no SSMS, às vezes diz que há um índice ausente em
#someTempTable____________________000000000000005B] (someField)
etc etc
Quando eu os adiciono assim ao sp:
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[#someTable] ([someField])
GO
Eu nunca pareço ver uma melhoria de velocidade. Portanto, muitas vezes não adiciono esses índices. Quando devo adicionar esses índices?
Adicione um índice se for usar sua tabela temporária e seu índice duas vezes ou mais durante a execução da consulta.
Ou para manter as tarefas de índice usuais, como exclusividade
Se seus dados carregados na tabela temporária já estiverem classificados, crie uma tabela temporária com o mesmo índice clusterizado como tipo de dados
MAS
levando em consideração o recurso do sql server de reutilização de tabelas temporárias - se você decidir criar um índice na tabela temporária - tente fazê-lo na instrução CREATE TABLE. Se você adicionar um índice explicitamente após a criação da tabela - isso impedirá que o sql server reutilize essa tabela na próxima vez
Isso é difícil de responder sem muito mais informações. Geralmente, eu diria: "depende".
De um modo geral, adiciono índices a tabelas temporárias se o benefício do índice for maior que o custo de execução original mais o custo de criação do índice. Você teria que fazer um benchmark usando SET STATISTICS IO como exemplo. Também gostaria de revisar os planos de execução usados antes e depois da adição do índice. Às vezes, os índices recomendados não são realmente bons índices recomendados :-)
Dado o fato de que a tabela temporária que você indicou tem escopo local (conforme indicado pelo único #), geralmente não é melhor adicionar um índice, pois a tabela ficará ativa apenas durante a conexão.
você deve atualizar as estatísticas após uma alteração significativamente grande na tabela, por exemplo: criar tempTable, adicionar índice, inserir 10k registros... ATUALIZAR ESTATÍSTICAS.