Partilhar via


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