Вопрос


Быстрое примечание

Итак, как я писал проблему ниже, я нашел способ исправить это сам. Я думал, что до сих пор опубликую вопрос, потому что:

  1. Кто-то может найти это полезным.
  2. Я не понимаю слишком много, почему это работает.

Во всяком случае, фиксированный код (см. Ответы).


Я изначально писал:

Я потратил веков погугулировать это и может найти много связанных ответов, но не совсем соответствует моим вопросам.

Я запускаю код ниже на базе данных SQL Server (10), и она выполняется очень быстро. План выполнения, который он использует, включает в себя хеш присоединиться.

Затем я бегу снова, но на этот раз воспоминал первые две строки (объявляете и устанавливают строки), а также удалите «+1» рядом с y. [Дате] и растрескивание «+ @Counter». Теперь запрос занимает возраст (в возрасте), чтобы завершить - план выполнения вместо этого используя вложенные петли. Обратите внимание, что я все еще просто добавляю один на дату, но используя переменную вместо константы.

Вопрос: Могу ли я сделать запрос, используя @Counter, используйте хеш присоединиться вместо вложенного петли?

(Немного фона: то, что я пытаюсь сделать, это слабо соответствует x. [В на дату] и y. [В на дату], чтобы они соответствовали, если они в течение определенного количества дней друг друга. Количество Дни для запроса для использования заполнены из поля в другой таблице. Я попробовал использовать Dateiff () сначала с ABS () и меньше, но я уверен, что всегда будет использовать вложенные петли. (Это делает, когда я пытаюсь использовать Это все равно!)

Я пытался сделать все, что упоминается в различных параметрах понюхивать статьи, но они не мешали. В любом случае, я не бегаю это как сохраненную процедуру. Я предполагаю, что есть что связано с индексом в поле [В на дату]. Несомненно

-- 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
Это было полезно?

Решение

Вопрос: Могу ли я сделать запрос, используя @Counter, используйте хеш присоединиться вместо вложенного петли?

Да. Вы можете использовать подсказку присоединиться к этому:

INNER HASH JOIN
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top