次のようなクエリがあるとします。
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がプローブ列のみを使用できないのはなぜですか?行を再度フィルタリングするために、同じ列を残差として使用する必要があるのはなぜですか?
テストデータの参照: