sql >> Base de Datos >  >> RDS >> Sqlserver

El uso de variables en la consulta genera un plan de consulta diferente

Porque cuando usa valores FIJOS con la PARAMETRIZACIÓN AUTOMÁTICA desactivada, el plan de consulta sabe EXACTAMENTE qué valor necesita para ejecutar la consulta. Por lo tanto, el plan se ajusta ESPECÍFICAMENTE a esos valores.

Sin embargo, cuando usa variables, el plan que se colocará en Query Cache es el que contiene las variables parametrizadas, que pueden reemplazarse por cualquier variable y reutilizarán el mismo plan. Por lo tanto, estos planes deberán ser más robustos y genéricos para manejar el "mejor caso promedio".

En SQL Server 2008, puede establecer si los parámetros simples se parametrizan automáticamente o no, de modo que obtenga de manera consistente el plan del "mejor caso promedio", con todas sus ventajas y desventajas.

Referencia:

EDITAR - sobre el rendimiento

En cuanto al rendimiento, el optimizador puede equivocarse; en este caso, buscó en las estadísticas for the exact values y sintió que el índice no es útil (puede ser un problema de punto de inflexión), por lo que el plan es para el escaneo en clúster. Es un buen arte forzar un plan de consulta, pero claramente usar un índice es un 50% más rápido para

  1. hardware específico
  2. distribución de datos en un punto específico en el tiempo
  3. valores específicos dados

A menos que tenga una muy, muy buena razón, no jugaría con el Optimizador de consultas (por ejemplo, usando sugerencias de índice) a menos que tenga muchos datos para demostrar que invariablemente lo hará más rápido.