if @a='0'
select * from tb ;
else
select * from tb where c1='100';上面这个语句可不可以改成
select * from tb where c1=case when @a='0' then '100' else c1 end
暂时不考虑null的情况
为什么上面两种的性能不一样?
求解译。难道优化器不知道@a是个变量?它也可以一下就计算出来了啊?
这是怎么回事。谢谢。
select * from tb ;
else
select * from tb where c1='100';上面这个语句可不可以改成
select * from tb where c1=case when @a='0' then '100' else c1 end
暂时不考虑null的情况
为什么上面两种的性能不一样?
求解译。难道优化器不知道@a是个变量?它也可以一下就计算出来了啊?
这是怎么回事。谢谢。
而且select * from tb 和select * from tb where c1 = c1
执行效率也不是一样的,后者会先把结果集放入临时表中,然后在判断一次恒等的。
(case when @a='0' then 1 else c1 end)=
(case when @a='0' then 1 else '100' end)这样写 怎么样
--不考虑null的情况
create table tb (c1 int)
insert into tb
select number from master..spt_values
where type='p' and number between 1 and 150gocreate proc test1 (@a varchar(10))
as
begin
if @a='0'
select * from tb ;
else
select * from tb where c1='100';
end
go
create proc test2 (@a varchar(10))
as
begin
select * from tb
where c1=case when @a='0' then c1 else '100' end
end
go
create proc test3 (@a varchar(10))
as
begin
select * from tb where @a='0' or (@a<>'0' and c1='100')
end--测试
exec test1 '1' --50%
exec test2 '1' --25%
exec test3 '1' --25%