Tengo una mesa con unas pocas docenas de filas. La configuración simplificada está siguiendo
CREATE TABLE #data ([Id] int, [Status] int);
INSERT INTO #data
VALUES (100, 1), (101, 2), (102, 3), (103, 2);
Y tengo una consulta que une esta tabla a un conjunto de filas construidas de valores de tabla (hechas de variables y constantes), como
DECLARE @id1 int = 101, @id2 int = 105;
SELECT
COALESCE(p.[Code], 'X') AS [Code],
COALESCE(d.[Status], 0) AS [Status]
FROM (VALUES
(@id1, 'A'),
(@id2, 'B')
) p([Id], [Code])
FULL JOIN #data d ON d.[Id] = p.[Id];
El plan de ejecución de consultas muestra que la decisión del optimizador es usar la FULL LOOP JOIN
estrategia, lo que parece apropiado, ya que ambas entradas tienen muy pocas filas. Sin embargo, una cosa que noté (y no puedo estar de acuerdo) es que las filas de TVC se están poniendo en cola (vea el área del plan de ejecución en el cuadro rojo).
¿Por qué el optimizador introduce el carrete aquí, cuál es la razón para hacerlo? No hay nada complejo más allá del carrete. Parece que no es necesario. ¿Cómo deshacerse de él en este caso, cuáles son las formas posibles?
El plan anterior se obtuvo el
Microsoft SQL Server 2014 (SP2-CU11) (KB4077063) - 12.0.5579.0 (X64)