有多少行的臨時表,而且是「字段2」中的臨時表的主鍵?
如果您沒有從左連接的右表中選擇任何行,並且連接是主鍵(或可能是唯一鍵),並且您沒有引用來自右表的列,則SQL Server可以避免必須訪問臨時表(因爲存在或不存在連接行對最終結果沒有影響):
示例。表設置:
create table T1 (
ID int not null primary key,
Col1 varchar(10) not null
)
go
insert into T1 (ID,Col1)
select 1,'a' union all
select 2,'b' union all
select 3,'c'
go
create table #t2 (
ID int not null primary key,
Col2 varchar(10) not null
)
go
insert into #t2 (ID,Col2)
select 1,'d' union all
select 2,'e' union all
select 4,'f'
go
create table #t3 (
ID int not null,
Col3 varchar(10) not null
)
go
insert into #t3 (ID,Col3)
select 1,'d' union all
select 2,'e' union all
select 1,'f'
而且查詢:
select T1.ID,T1.Col1 from T1 left join #t2 t2 on T1.ID = t2.ID
select T1.ID,T1.Col1,t2.Col2 from T1 left join #t2 t2 on T1.ID = t2.ID
select T1.ID,T1.Col1 from T1 left join #t3 t3 on T1.ID = t3.ID
select T1.ID,T1.Col1,t3.Col2 from T1 left join #t2 t3 on T1.ID = t3.ID
但在所有的第一個查詢,連接發生預期。但是由於#t2
中存在或不存在行不會影響第一個查詢的最終結果,因此它會避免完全執行連接。
但是,如果它不是這樣的(我希望它是在查詢計劃中的明顯差異)<我有點難住。
這兩個字段的數據類型是什麼? – HLGEM
'char(1)'。這是「Y」或「N」。 –
那麼,我吹噓自己是廣泛領域的理論,因此需要更長的時間來傳遞數據。但它確實解釋了爲什麼索引可能沒有幫助,沒有足夠的特異性。 – HLGEM