SR0004: Evite usar colunas que não possuem índices como expressões de teste em predicados
RuleId |
SR0004 |
<strong>Categoria</strong> |
Microsoft.Performance |
Alteração significativa |
Não-separável |
Causa
Um predicado IN faz referência a uma coluna que não tem um índice.
Descrição da regra
Você pode causar uma verificação de tabela se você usar uma cláusula WHERE que faz referência a uma ou mais colunas que não estão indexadas como parte de um predicado IN. A verificação de tabela reduzirá o desempenho.
Como corrigir violações
Para resolver esse problema, você deve fazer uma das seguintes alterações:
Altere o predicado IN para fazer referência somente as colunas que tenham um índice.
Adicionar um índice para qualquer coluna em que o predicado IN referencia e que ainda não tiver um índice.
Quando suprimir avisos
Você pode suprimir esse aviso se a tabela nunca conterá mais de algumas linhas.
Exemplo
Neste exemplo, uma instrução SELECT simple faz referência a uma coluna, c1, que não tinha um índice. A segunda instrução define um índice que podem ser adicionados para resolver esse aviso.
CREATE PROCEDURE [dbo].[Procedure3WithWarnings]
AS
SELECT [Comment]
FROM [dbo].[Table2]
WHERE [c1] IN (1, 2, 3)
CREATE INDEX [IX_Table2_C1]
ON [dbo].[Table2] (c1);
Consulte também
Conceitos
Analisando o código do banco de dados para melhorar a qualidade do código