SQL 在连接中添加附加列时,服务器查询连接花费很长时间

SQL Server Query Join taking very long when adding an additional column in the join

我正在 运行 对 table 进行基本查询,每个 table 中都有一个唯一 ID,这是每个中的非聚集索引。一个table有800万行,另一个有80万行。

当我 运行 以下内容时,不到一秒 returns 24,000 行:

select     
    a.[ID]      
    ,b.[ID]    
from     
    dbo.tbl_1 a    
join     
    dbo.tbl_2 b    
on 
    a.unique_id = b.unique_id 

但是,当我在连接中添加一个额外的列会显着减少记录集时,这大约需要 8 分钟

select     
    a.[ID]      
    ,b.[ID]    
from     
    dbo.tbl_1 a    
join     
    dbo.tbl_2 b    
on 
    a.unique_id = b.unique_id 
    AND a.code_letter = b.code_letter

"code_letter" 列只有一个字母,并且设置为 varchar(1)。我正在挠头试图理解为什么这会挂起。问题是我有一个 运行 动态 sql 插入查询,其中包含 20,000 个连接排列,而且它花费的时间太长了。

编辑 在尝试了这么多方法之后,我意识到一个简单的 select * 似乎工作得非常有效,而 selecting 特定的列是罪魁祸首。这是我 select *:

时的执行计划

这是我select特定列时的执行计划:

同样,我的连接完全相同,但 selection 列不同。

OP说,他没有得到预期的结果,根据他的观察,我会提供不同的解决方案。

我要做的是,执行以下命令并将数据获取到临时 table

select     
    a.[ID] as aID      
    ,b.[ID] as bID
    ,a.code_letter as aCode_letter  
    ,b.code_letter as bCode_letter
into #t
from     
    dbo.tbl_1 a    
join     
    dbo.tbl_2 b    
on 
    a.unique_id = b.unique_id 

然后执行以下

Select aID, bID from #t Where aCode_letter = bCode_letter

select DISTINCT a.*    
into #ta
from     
    dbo.tbl_1 a    
join     
    dbo.tbl_2 b    
on 
    a.unique_id = b.unique_id 

select DISTINCT b.*    
into #tb
from     
    dbo.tbl_1 a    
join     
    dbo.tbl_2 b    
on 
    a.unique_id = b.unique_id 

并执行

Select a.ID, b.ID 
from #ta a
Inner Join #tb b 
on a.unique_id = b.unique_id and a.Code_letter = b.Code_letter