SR0006: Mover una referencia de columna a un lado de un operador de comparación para utilizar un índice de columna

Identificador de regla

SR0006

Categoría

Microsoft.Performance

Cambio problemático

Poco problemático

Causa

Como parte de una comparación, una expresión contiene una referencia de columna.

Descripción de la regla

El código podría producir un recorrido de tabla si compara una expresión que contiene una referencia de columna.

Cómo corregir infracciones

Para resolver este problema, debe rehacer la comparación de manera que la referencia de columna aparezca sola a un lado del operador de comparación, en lugar de dentro de una expresión. Al ejecutar el código que tiene la referencia de columna sola a un lado del operador de comparación, SQL Server pueden utilizar el índice de columna y no se realiza ningún recorrido de tabla.

Cuándo suprimir advertencias

Podría suprimir esta advertencia si la tabla cuya columna se está comparando nunca contendrá más que unas pocas filas.

Ejemplo

En el primer procedimiento, una cláusula WHERE incluye la columna [c1] en una expresión como parte de una comparación. En el segundo procedimiento, los resultados de la comparación serán idénticos pero nunca requerirán que se examine la tabla.

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))

Vea también

Conceptos

Analizar el código de base de datos para mejorar la calidad del código