这么写where效率会很低吗

这样写where效率会很低吗
SQL中的 OR 有中断功能吗,像程序中if(条件一 or 条件二),如果条件一成立,条件二不被执行,SQL中也这样么,多条件组合查询有什么好的编写方式?
界面是类似这样子的:
这么写where效率会很低吗
我这么写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)

------解决方案--------------------
这样写没问题,但效率会很低
------解决方案--------------------
会效率低。。
------解决方案--------------------
用存储过程 用IF ELSE分阶段过滤。
------解决方案--------------------
引用:
SQL中的 OR 有中断功能吗,像程序中if(条件一 or 条件二),如果条件一成立,条件二不被执行,SQL中也这样么,多条件组合查询有什么好的编写方式?
界面是类似这样子的:
这么写where效率会很低吗
我这么写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的情况。

参考


------解决方案--------------------
引用:
Quote: 引用:

用存储过程 用IF ELSE分阶段过滤。


您说的是这样么?

string sql="select fileds from table where 1=1";
if(!string.isnullorempty(供应商))
{
 sql+=" and 供应供应='"++"'"
}
if(状态!="")
{
sql+=" and 状态=";
}

可以封装在存储过程里面 程序调用就OK了

如果在程序端来写的话难写。
------解决方案--------------------
最好是将条件的判定放在应用程序端,而不是放在数据库端。看条件,应该在数据库端,用一两个条件就可以。而判断用哪个条件则放在应用程序端。
------解决方案--------------------
引用:
最好是将条件的判定放在应用程序端,而不是放在数据库端。看条件,应该在数据库端,用一两个条件就可以。而判断用哪个条件则放在应用程序端。


同意。

用选好的条件,在应用程序中动态拼好;