Я пытаюсь объединить две относительно простые таблицы вместе, но мой запрос серьезно зависает. Я не уверен, почему, но я думаю, что это может иметь какое-то отношение к функции «между». Моя первая таблица выглядит примерно так (с множеством других столбцов, но это будет единственный столбец, который я выберу):
RowNumber
1
2
3
4
5
6
7
8
Моя вторая таблица «группирует» мои строки в «блоки» и имеет следующую схему:
BlockID RowNumberStart RowNumberStop
1 1 3
2 4 7
3 8 8
Желаемый результат, который я хочу получить, - это связать RowNumber с BlockID, как показано ниже, с тем же количеством строк с первой таблицей. Результат будет выглядеть так:
RowNumber BlockID
1 1
2 1
3 1
4 2
5 2
6 2
7 2
8 3
Чтобы получить это, я использовал следующий запрос, запись результатов во временную таблицу:
select A.RowNumber, B.BlockID
into TEMP_TABLE
from TABLE_1 A left join TABLE_2 B
on A.RowNumber between B.RowNumberStart and B.RowNumberStop
TABLE_1 и TABLE_2 на самом деле очень большие таблицы. Таблица 1 содержит около 122 миллионов строк, а таблица TABLE_2 - около 65 миллионов строк. В TABLE_1 RowNumber определен как bigint, а в TABLE_2 BlockID, RowNumberStart и RowNumberStop все определены как int. Не уверен, что это имеет значение, но просто хотел включить эту информацию.
Запрос завис на восемь часов. Подобные запросы по этому типу и объему данных не занимают столько времени. Так что мне интересно, может ли это быть оператор «между», который подвешивает этот запрос.
Определенно приветствую любые предложения о том, как сделать это более эффективным.