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