Partilhar via


SR0006: Mover uma referência de coluna em um dos lados de um operador de comparação para usar um índice de coluna

RuleId

SR0006

<strong>Categoria</strong>

Microsoft.Performance

Alteração significativa

Não-separável

Causa

Como parte de uma comparação, uma expressão contém uma referência de coluna.

Descrição da regra

Seu código pode causar uma verificação de tabela se ele compara uma expressão que contém uma referência de coluna.

Como corrigir violações

Para resolver esse problema, você deve refazer a comparação para que a referência de coluna aparece sozinha em um lado do operador de comparação, em vez de dentro de uma expressão. Quando você executar o código que tenha apenas a referência de coluna em um lado do operador de comparação, SQL Server pode usar o índice da coluna e não é realizada nenhuma verificação de tabela.

Quando suprimir avisos

Você pode suprimir esse aviso se a tabela cuja coluna está sendo comparada nunca conterá mais de algumas linhas.

Exemplo

No primeiro procedimento, uma cláusula WHERE inclui [c1] da coluna em uma expressão como parte de uma comparação. No segundo procedimento, os resultados da comparação serão idêntico mas nunca exigem uma verificação de tabela.

CREATE PROCEDURE [dbo].[Procedure3WithWarnings]
@param1 int
AS
SELECT [c1], [c2], [c3], [Comment] 
FROM [dbo].[Table2]  
WHERE ([c1] + 5 > @param1)

CREATE PROCEDURE [dbo].[Procedure3Fixed]
@param1 int
AS
SELECT [c1], [c2], [c3], [Comment] 
FROM [dbo].[Table2]  
WHERE ([c1] > (@param1 - 5))

Consulte também

Conceitos

Analisando o código do banco de dados para melhorar a qualidade do código