我试图将两个相对简单的表连接在一起,但我的查询经历了严重的挂起。 我不确定为什么,但我认为这可能与“between”函数有关。 我的第一个表看起来像这样(还有很多其他列,但这将是我提取的唯一列):
RowNumber
1
2
3
4
5
6
7
8
我的第二个表"groups"将行分组成“块”,其架构如下:
BlockID RowNumberStart RowNumberStop
1 1 3
2 4 7
3 8 8
我希望得到的结果是将行号与块ID进行关联,如下所示,并且与第一个表格具有相同数量的行。因此,结果应该像这样:
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是非常大的表格。 TABLE_1大约有122M行,而TABLE_2大约有65M行。 在TABLE_1中,RowNumber被定义为“bigint”,而在TABLE_2中,BlockID,RowNumberStart和RowNumberStop都被定义为“int”。 不确定这是否有影响,但只是想包括这些信息。
查询现在已经挂起了八个小时。 类似于此类数据量和类型的查询并不需要花费这么长时间。 所以我想知道是不是“between”语句导致了这个查询的挂起。
绝对欢迎任何关于如何使此过程更加高效的建议。