Pregunta


Nota rápida

Así que, cuando estaba escribiendo el siguiente problema que encontró una manera de arreglarlo yo. Yo pensaba que todavía había puesto la cuestión, ya que:

  1. Alguien podría encontrar útil.
  2. No entiendo demasiado por qué funciona.

De todos modos el código fijo (ver respuestas).


Que originalmente escribió:

He pasado las edades googlear esto y se puede encontrar gran cantidad de respuestas relacionadas, pero ninguno que coincide exactamente con mi pregunta.

ejecutar el código que aparece arriba (10) de base de datos SQL Server y se ejecuta muy rápido. El plan de ejecución que utiliza involucra una combinación hash.

Luego ejecutar de nuevo, pero esta vez elimine el comentario de las dos primeras líneas (Declarad y líneas), y también borrar el '1' al lado de y. [Fecha y hora] y quite el comentario '+ @COUNTER'. Ahora la consulta tarda edades tras edades (a) completa - el plan de ejecución en lugar de utilizar bucles anidados. Tenga en cuenta que estoy siendo simplemente añadiendo uno a la fecha, pero utilizando una variable en lugar de una constante.

La pregunta es: ¿puedo realizar la consulta mediante el uso @COUNTER una combinación hash en lugar de un bucle anidado

(Un poco de historia: Lo que estoy tratando de hacer es vagamente coincide con x. [Fecha y hora] y. [Fecha y hora] para que coincidan si están dentro de un número especificado de días de diferencia. El número de días para la consulta a su uso está poblado de un campo de otra tabla. He intentado utilizar datediff () primero con abs () y menos, pero estoy bastante seguro de que va a utilizar siempre bucles anidados. (Lo hace cuando trato de todos modos!)

He intentado hacer todo lo que se refiere en varios artículos descubrimiento de parámetros, pero que no cambiaron las cosas. De todos modos no estoy corriendo como un procedimiento almacenado. Supongo que hay algo que ver con un índice en el campo [Fecha y hora]. )

-- DECLARE @COUNTER INT
-- SET @COUNTER = 1

BEGIN

    SELECT
        x.[line id]
        , y.[line id]

    FROM
        lines1 AS x
        JOIN lines2 AS y ON (

            x.[in date] = y.[in date] + 1 -- + @COUNTER
            AND x.[country] = y.[country]

        )

    WHERE
        x.[country] = 'USA'

END
¿Fue útil?

Solución

La pregunta es: ¿puedo realizar la consulta mediante el uso @COUNTER una combinación hash en lugar de un bucle anidado

Sí. Puede utilizar una sugerencia de combinación para forzar a esto:

INNER HASH JOIN
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top