Katakanlah, kami memiliki permintaan seperti ini:
select a.*,b.*
from
a join b
on a.col1=b.col1
and len(a.col1)=10
Dengan asumsi permintaan di atas menggunakan Gabung Hash dan memiliki residu, kunci penyelidikan akan col1
dan residu akan len(a.col1)=10
.
Tetapi ketika sedang melalui contoh lain, saya bisa melihat baik probe dan residual menjadi kolom yang sama. Di bawah ini adalah uraian tentang apa yang ingin saya katakan:
Pertanyaan:
select *
from T1 join T2 on T1.a = T2.a
Rencana pelaksanaan, dengan probe dan residu disorot:
Data uji:
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
Pertanyaan:
Bagaimana bisa probe dan residu menjadi kolom yang sama? Mengapa SQL Server tidak bisa menggunakan kolom probe saja? Mengapa harus menggunakan kolom yang sama dengan residu untuk menyaring baris lagi?
Referensi untuk data uji: