博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
去掉影响效率的where 1=1
阅读量:5137 次
发布时间:2019-06-13

本文共 1097 字,大约阅读时间需要 3 分钟。

最近看了篇文章,觉得挺有道理。实际项目中,我们进行sql条件过滤,我们不能确定是不是有条件。也不能确定条件的个数。大多数人会先把sql语句组装为:

SELECT* FROM T_table WHERE 1=1

这样,如果有其他过滤条件直接加上“and 其他条件”,如果没有的话,where 1=1也不影响查询结果。这样很可能会造成非常大的性能损失,因为使用添加了“1=1”的过滤条件以后数据库系统就无法使用索引等查询优化策略,数据库系统将会被迫对每行数据进行扫描 来比较此行是否满足过滤条件, 当表中数据量比较大的时候查询速度会非常慢。 因此如果数据检索对性能有比较高的要求就不要使用这种方式。下面是参考别人一种参考实现,伪代码如下:

private void doQuery() {   Bool hasWhere = false;   StringBuilder  sql  =  new  StringBuilder("  SELECT  *  FROM  T_Employee");   if(条件1是否添加)   {     hasWhere = appendWhereIfNeed(sql, hasWhere);     sql.appendLine("FNumber BETWEEN '"+文本框1内容+"' AND '"+文本框2内容+"'");   }   if(条件2是否添加)   {     hasWhere = appendWhereIfNeed(sql, hasWhere);     sql.appendLine("FName LIKE '%"+条件文本框内容+"%'");   }   if(条件3是否添加)   {     hasWhere = appendWhereIfNeed(sql, hasWhere);     sql.appendLine("FAge BETWEEN "+条件3内容1+" AND "+条件3内容2);   }   executeSQL(sql); } private Bool appendWhereIfNeed(StringBuilder sql,Bool hasWhere) {   if(hasWhere==false)   {     sql. appendLine("WHERE");   }   else   {     sql. appendLine("AND");   }   return true;}

 

 

 

转载于:https://www.cnblogs.com/shizhongtao/p/3512134.html

你可能感兴趣的文章
性能测试小总结(一) 基础概念
查看>>
hash-6.CopyOnWriteArrayList
查看>>
对商品浏览记录的理解
查看>>
Mac下Python3.5.1+django1.10.1安装及eclipse配置
查看>>
Es首页
查看>>
wscript shell
查看>>
【百度语音识别】JavaAPI方式语音识别示例
查看>>
MongoDB 集群配置
查看>>
第二部分 : 简单句的核心变化(主语/宾语/表语的变化)
查看>>
FIFO页面置换算法
查看>>
第三章寄存器(内存访问)
查看>>
HTTP导出和上传文件处理
查看>>
定时每天执行前一天的数据导入oracle
查看>>
IOS 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: URLString'
查看>>
我这个IOS渣渣又来写随笔了
查看>>
gdb 远程调试 android native 程序
查看>>
多线程常用方法
查看>>
ViewPager 放到ListView HeadView中不显示的问题
查看>>
Web知识简易介绍及HTTP知识总结
查看>>
Net学习日记_ASP.Net_MVC_HtmlHelper_笔记
查看>>