说,我们有这样的查询:
select a.*,b.*
from
a join b
on a.col1=b.col1
and len(a.col1)=10
假设以上查询使用哈希联接并具有残差,则探测键为col1
,残差为len(a.col1)=10
。
但是,通过另一个示例,我可以看到探针和残差在同一列。以下是我要说的话的详细说明:
查询:
select *
from T1 join T2 on T1.a = T2.a
执行计划,突出显示探针和残差:
测试数据:
create table T1 (a int, b int, x char(200))
create table T2 (a int, b int, x char(200))
set nocount on
declare @i int
set @i = 0
while @i < 1000
begin
insert T1 values (@i * 2, @i * 5, @i)
set @i = @i + 1
end
declare @i int
set @i = 0
while @i < 10000
begin
insert T2 values (@i * 3, @i * 7, @i)
set @i = @i + 1
end
题:
探针和残基如何成为同一列?为什么SQL Server不能仅使用探测列?为什么必须使用同一列作为残差来再次过滤行?
测试数据参考: