性能—在联接中添加其他列时,sql server查询联接需要很长时间

o0lyfsai  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(260)

我在一个表上运行一个基本查询,每个表中都有一个唯一的id,每个表中都有一个非聚集索引。一个表有800万行,另一个表有80万行。
当我运行以下命令时,它在不到一秒钟的时间内返回24000行:

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

但是,当我在join中添加一个额外的列(这将显著减少记录集)时,这大约需要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\u letter”列只是一个字母,设置为varchar(1)。我绞尽脑汁想弄明白为什么要挂起来。问题是,我运行了一个动态SQLINSERT查询,其中包含20000个连接排列,而且花费的时间太长。
在尝试了这么多方法之后,我意识到 select * 似乎工作效率很高,而选择特定列是罪魁祸首。这是我来的时候的执行计划 select * :

以下是我选择特定列时的执行计划:

同样,我的连接是完全相同的,但是列选择是不同的。

fgw7neuy

fgw7neuy1#

op说,他没有得到预期的结果,根据他的观察,我会提供一个不同的解决方案。
我要做的是,执行以下命令并将数据获取到temp表中

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

相关问题