Síntomas
Al rellenar una variable de tabla con muchas filas y, a continuación, unirse a ella con otras tablas, el optimizador de consultas puede elegir un plan de consultas ineficaz, lo que puede dar lugar a un rendimiento lento de la consulta.
Resolución
Después de aplicar este hotfix, puede activar la marca de seguimiento 2453 para permitir que una variable de tabla desencadene la recompilación cuando se cambie un número suficiente de filas. Esto puede permitir que el optimizador de consultas elija un plan más eficaz. El problema se solucionó por primera vez en la siguiente actualización acumulativa o Service Pack para SQL Server.
Actualización acumulativa 3 para SQL Server 2014 /en-us/help/2984923
Cada actualización acumulativa para SQL Server contiene todas las revisiones y todas las revisiones de seguridad incluidas en la actualización acumulativa anterior. Consulte las últimas actualizaciones acumulativas para SQL Server:
Los Service Pack son acumulativos. Cada nuevo Service Pack contiene todas las revisiones de Service Packs previos junto con revisiones nuevas. Nuestra recomendación es aplicar el último Service Pack y la actualización acumulativa más reciente para ese Service Pack. No es necesario instalar un Service Pack anterior antes de instalar el Service Pack más reciente. Use la tabla 1 del artículo siguiente para obtener más información sobre el Service Pack más reciente y la última actualización acumulativa:
Cómo determinar el nivel de versión, edición y actualización de SQL Server y sus componentes
Más información
Cuando se usa una variable de tabla en un lote o procedimiento, la consulta se compila y se optimiza para el estado inicial vacío de la variable de tabla. Si esta variable de tabla se rellena con muchas filas en tiempo de ejecución, es posible que el plan de consulta precompilado ya no sea óptimo. Por ejemplo, la consulta puede estar uniendo una variable de tabla con un bucle anidado porque, generalmente, es más eficaz para un pequeño número de filas. Este plan de consulta puede ser ineficaz si la variable de tabla tiene millones de filas. Una combinación hash puede ser una opción mejor en estas condiciones. Para obtener un nuevo plan de consulta, es necesario volver a compilarlo. A diferencia de otras tablas de usuario o temporales, sin embargo, el cambio de recuento de filas en una variable de tabla no desencadena una consulta de recompilación. Normalmente, puede solucionar este error con OPTION (RECOMPILE), que tiene su propio costo general. La marca de seguimiento 2453 permite beneficiarse de la consulta volver a compilar sin opción (volver a compilar). Esta marca de seguimiento difiere de OPTION (RECOMPILE) en dos aspectos principales. (1) usa el mismo umbral de recuento de filas que otras tablas. No es necesario compilar la consulta para cada ejecución, a diferencia de OPTION (RECOMPILE). Desencadenaría Recompile solo cuando el recuento de filas supere el umbral predefinido. (2) OPTION (RECOMPILE) fuerza la búsqueda de parámetros y la optimización de la consulta. Esta marca de seguimiento no fuerza la lectura de parámetros.Nota esta marca de seguimiento debe estar activada en tiempo de ejecución. No puede usar esta marca de seguimiento con QUERYTRACEON. Esta marca de seguimiento debe usarse con precaución porque puede aumentar el número de recompilaciones de consulta, lo que podría costar más que ahorrar de una mejor optimización de consultas.
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "Se aplica a".