我在一个表上运行一个基本查询,每个表中都有一个唯一的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 *
:
以下是我选择特定列时的执行计划:
同样,我的连接是完全相同的,但是列选择是不同的。
1条答案
按热度按时间fgw7neuy1#
op说,他没有得到预期的结果,根据他的观察,我会提供一个不同的解决方案。
我要做的是,执行以下命令并将数据获取到temp表中
然后执行以下命令
和执行官