【发布时间】:2020-10-13 16:07:25
【问题描述】:
我正在改进通过“声明”传递变量的 SSIS 流程,我发现:
不使用声明(执行时间:1秒)
select *
from fact_Venta
where Data_ID >= 20201001
and Data_ID <= 20201001
使用声明(执行时间:2分钟)
declare @data1 as int = 20201001
declare @data2 as int = 20201001
select *
from fact_Venta
where Data_ID >= @data1
and Data_ID <= @data2
如您所见,当我使用“声明”SQL 数据库引擎时,不要使用索引
有关更多信息,这是用于“位置”列的索引
谁能解释一下为什么会这样?
谢谢!
【问题讨论】:
-
两个服务器上的同一台服务器?两者的 SET 选项相同吗?查询计划仅显示可用内容的一部分。您可以将完整的计划粘贴到brentozar.com/pastetheplan,然后将它们链接到您的问题中。
-
嗨@billinkc。两个查询都在同一台服务器上并具有相同的 SET 选项。在那里你有完整的两个执行表明在同一台服务器上执行,相同的设置选项和相同的时间(但在 brentozar 网络上没有正确表示带有声明的查询):brentozar.com/pastetheplan/?id=HJg6_7NDP