这是今天项目上徐遇到的一个毕竟诡异的问题,问题现象和解决过程如下
1、如下sql 夸库查询需要2分钟
select * from 库A.dbo.表1
inner join 库B.dbo.表2 on (xxxx条件忽略)
where 库A.dbo.表1.字段='xxxxxx' --这里是关键注意下
2、然后在存储过程里面写法如下,也是需要2分钟
declare @no nvarchar(50)
select * from 库A.dbo.表1
inner join 库B.dbo.表2 on (xxxx条件忽略)
where 库A.dbo.表1.字段=@no --注意和1有区别了
但是我把2拷贝出来执行的时候,奇迹的发现只需要2秒
declare @no nvarchar(50)
set @no='xxxxx' --这是拷贝出来执行
select * from 库A.dbo.表1
inner join 库B.dbo.表2 on (xxxx条件忽略)
where 库A.dbo.表1.字段=@no --注意和1有区别了
3、然后就想到了用存储过程里面exec执行这句代码,成功把2分钟优化到2秒
create table ##temp --定义全局临时表
declare @sql nvarchar(max) --执行sql
set @sql='
declare @no nvarchar(50)
set @no=''xxxxx''
insert into ##temp --结果插入到临时表
select * from 库A.dbo.表1
inner join 库B.dbo.表2 on (xxxx条件忽略)
where 库A.dbo.表1.字段=@no
'
exec(@sql) --执行
select * from ##temp
drop table ##temp