这样写where效率会很低吗

清晨宸 2014-08-18 09:56:25
SQL中的 OR 有中断功能吗,像程序中if(条件一 or 条件二),如果条件一成立,条件二不被执行,SQL中也这样么,多条件组合查询有什么好的编写方式?
界面是类似这样子的:

我这么写SQL,会不会有大问题?

where T1.line_idName=@lineIDName
and charindex('999',T1.status)>0
and (@searchType<> 'B' or T3.nickName like '%'+@searchWord+'%')
and (@searchType<> 'C' or T3.idName like '%'+@searchWord+'%')
and (@searchType<> 'D' or T2.nickName like '%'+@searchWord+'%')
and (@searchType<> 'E' or T2.idName like '%'+@searchWord+'%')
and (@searchType<> 'F' or T1.tagID like '%'+@searchWord+'%')
and (T1.is_hege=1)
...全文
160 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_20182467 2014-08-29
  • 打赏
  • 举报
回复
主要得看一下存储过程程序是否有优化
卖水果的net 版主 2014-08-18
  • 打赏
  • 举报
回复
引用 8 楼 acupofnescafe 的回复:
最好是将条件的判定放在应用程序端,而不是放在数据库端。看条件,应该在数据库端,用一两个条件就可以。而判断用哪个条件则放在应用程序端。
同意。 用选好的条件,在应用程序中动态拼好;
幸运的意外 2014-08-18
  • 打赏
  • 举报
回复
最好是将条件的判定放在应用程序端,而不是放在数据库端。看条件,应该在数据库端,用一两个条件就可以。而判断用哪个条件则放在应用程序端。
--小F-- 2014-08-18
  • 打赏
  • 举报
回复
引用 5 楼 c2c9ccc 的回复:
[quote=引用 3 楼 fredrickhu 的回复:] 用存储过程 用IF ELSE分阶段过滤。
您说的是这样么? string sql="select fileds from table where 1=1"; if(!string.isnullorempty(供应商)) { sql+=" and 供应供应='"++"'" } if(状态!="") { sql+=" and 状态="; }[/quote] 可以封装在存储过程里面 程序调用就OK了 如果在程序端来写的话难写。
清晨宸 2014-08-18
  • 打赏
  • 举报
回复
引用 4 楼 OrchidCat 的回复:
如果lz使用的是网页相关处理的话,最好的办法是使用过滤器,或者是筛选器,来定位对应的sql语句。 如果使用的是hibernate自动生成的sql语句, 也可以进行优化。 sql 本身有lz所说的短路机制。大部分的消耗应该在拼接解析sql语句上。 lz可以用查查看io的情况。 参考
谢谢、目前还不会用,我会去学习学习
清晨宸 2014-08-18
  • 打赏
  • 举报
回复
引用 3 楼 fredrickhu 的回复:
用存储过程 用IF ELSE分阶段过滤。
您说的是这样么? string sql="select fileds from table where 1=1"; if(!string.isnullorempty(供应商)) { sql+=" and 供应供应='"++"'" } if(状态!="") { sql+=" and 状态="; }
Mr_Nice 2014-08-18
  • 打赏
  • 举报
回复
引用 楼主 c2c9ccc 的回复:
SQL中的 OR 有中断功能吗,像程序中if(条件一 or 条件二),如果条件一成立,条件二不被执行,SQL中也这样么,多条件组合查询有什么好的编写方式? 界面是类似这样子的: 我这么写SQL,会不会有大问题?

    where T1.line_idName=@lineIDName
	    and charindex('999',T1.status)>0
	    and (@searchType<> 'B' or T3.nickName like '%'+@searchWord+'%')
	    and (@searchType<> 'C' or T3.idName like '%'+@searchWord+'%')
	    and (@searchType<> 'D' or T2.nickName like '%'+@searchWord+'%')
	    and (@searchType<> 'E' or T2.idName like '%'+@searchWord+'%')
	    and (@searchType<> 'F' or T1.tagID like '%'+@searchWord+'%')
	    and (T1.is_hege=1)
如果lz使用的是网页相关处理的话,最好的办法是使用过滤器,或者是筛选器,来定位对应的sql语句。 如果使用的是hibernate自动生成的sql语句, 也可以进行优化。 sql 本身有lz所说的短路机制。大部分的消耗应该在拼接解析sql语句上。 lz可以用查查看io的情况。 参考
--小F-- 2014-08-18
  • 打赏
  • 举报
回复
用存储过程 用IF ELSE分阶段过滤。
發糞塗牆 2014-08-18
  • 打赏
  • 举报
回复
会效率低。。
KeepSayingNo 2014-08-18
  • 打赏
  • 举报
回复
这样写没问题,但效率会很低

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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