在select中使用case when 查询效率非常差

mzqfk 2007-11-13 12:54:43
declare @code_type char(2),@code_order int ,@code varchar( 10 ),@code_type_du char(2)

set @code_type = 'CO'
set @code_type_du = @code_type
set @code_order = 1
set @code = '10'

select *
from
(
-- 如果在下面的select case when 中使用@code_type变量 这种执行时间达到41秒.
-- 而如果在下面的select case when 中使用常量,执行时间只要1秒
select case when @code_type = 'CO' and 1 = 1 then ltrim(rtrim( newco ))+ltrim(rtrim( si_id ))
when 'CO' = 'CO' and 1<> 1 then ltrim(rtrim( si_id ))+ltrim(rtrim( newco ))
when 'CO' = 'SI' and 1 = 1 then ltrim(rtrim( si_id ))+ltrim(rtrim( newco ))
else ltrim(rtrim( newco ))+ltrim(rtrim( si_id )) end as 'newbarcode'
from
( select '10' as 'newco' ) as newco,
( select code_id as 'si_id' from t_bd_base_code where type_no = @code_type ) as si
) as a,
(

select case 1 when 1 then barcode1 else barcode2 end as 'oldbarcode'
from t_bd_all_barcode_maz
where case 1 when 1 then barcode1 else barcode2 end like case when @code_type = 'CO' and 1 = 1 then '10' +'%'
when @code_type = 'CO' and 1 <> 1 then '%'+ '10'
when @code_type = 'SI' and 1 = 1 then '%'+ '10'
else '10' + '%' end
) as b
where a.newbarcode = b.oldbarcode

谁知道这是什么原因?
...全文
4299 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mzqfk 2007-11-23
  • 打赏
  • 举报
回复
up
mzqfk 2007-11-20
  • 打赏
  • 举报
回复
效率差得太远,可知道SQL的如何来处理这种语句的呢?
fcuandy 2007-11-19
  • 打赏
  • 举报
回复
when 'CO ' = 'CO ' and 1 <> 1
when 'CO ' = 'CO ' and 1 = 1
等于不做条件检测,直接得到结果. 没有运算,当然快了.
云中客 2007-11-19
  • 打赏
  • 举报
回复
曾经有段时间,发现在自己不会用其他的编程工具了,只会写存储过程!!

我想这就是在SQL版泡出来的毛病吧!!

呵呵!!
云中客 2007-11-19
  • 打赏
  • 举报
回复
差是当然的,所以不建议写语句一定要写成一条,有时效率反而会低些
mzqfk 2007-11-19
  • 打赏
  • 举报
回复
UP
mzqfk 2007-11-19
  • 打赏
  • 举报
回复
select case when @code_type = 'CO ' and 1 = 1 then ltrim(rtrim( newco ))+ltrim(rtrim( si_id ))
when 'CO ' = 'CO ' and 1 <> 1 then ltrim(rtrim( si_id ))+ltrim(rtrim( newco ))
when 'CO ' = 'SI ' and 1 = 1 then ltrim(rtrim( si_id ))+ltrim(rtrim( newco ))
else ltrim(rtrim( newco ))+ltrim(rtrim( si_id )) end as 'newbarcode

如果这中间的'CO ' = 'CO '使用 @code_type = 'CO ' 来做判断,则严重影响了运行效率。不知是何时原因
-狙击手- 2007-11-13
  • 打赏
  • 举报
回复
1 = 1 和 1 <> 1  有什么意义
dobear_0922 2007-11-13
  • 打赏
  • 举报
回复
使用变量和常量应该是差不多的
mugua604 2007-11-13
  • 打赏
  • 举报
回复
'CO ' = 'CO ' and 1 <> 1
很多都不明白~

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧