新来的同事问我 where 1=1 是什么意思

简介: 新来的同事问我 where 1=1 是什么意思
  • 写在前面
  • where 1=1
  • 实测
  • 结论

写在前面

新的同事来之后问我 where 1=1 是什么有意思,这样没意义啊,我笑了。今天来说明下。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能。

项目地址:https://github.com/YunaiV/ruoyi-vue-pro

where 1=1

先来看一段代码

<select id="queryBookInfo" parameterType="com.ths.platform.entity.BookInfo" resultType="java.lang.Integer">
 select count(id) from t_book t where 1=1
<if test="title !=null and title !='' ">
 AND title = #{title} 
</if> 
<if test="author !=null and author !='' ">
 AND author = #{author}
</if> 
</select>

上面的代码很熟悉,就是查询符合条件的总条数。在mybatis中常用到if标签判断where子句后的条件,为防止首字段为空导致sql报错。没错 ,当遇到多个查询条件,使用where 1=1 可以很方便的解决我们条件为空的问题,那么这么写 有什么问题吗 ?

网上有很多人说,这样会引发性能问题,可能会让索引失效 ,那么我们今天来实测一下,会不会不走索引?

基于微服务的思想,构建在 B2C 电商场景下的项目实战。核心技术栈,是 Spring Boot + Dubbo 。未来,会重构成 Spring Cloud Alibaba 。

项目地址:https://github.com/YunaiV/onemall

实测

title字段 已经加上索引,我们通过EXPLAIN看下

EXPLAIN SELECT * FROM t_book WHERE  title = '且在人间';

8.jpg

EXPLAIN SELECT * FROM t_book WHERE 1=1 AND title = '且在人间';

11.jpg

对比上面两种我们会发现 可以看到 possible_keys(可能使用的索引)  和  key(实际使用的索引)都使用到了索引进行检索

结论

where 1=1也会走索引,不影响查询效率,我们写的sql指令会被mysql 进行解析优化成自己的处理指令,在这个过程中1 = 1这类无意义的条件将会被优化。

使用explain EXTENDED  sql 进行校对,发现确实where1=1这类条件会被mysql的优化器所优化掉。

那么我们在mybatis当中可以改变一下写法,因为毕竟mysql优化器也是需要时间的,虽然是走了索引,但是当数据量很大时,还是会有影响的,所以我们建议代码这样写:

<select id="queryBookInfo" parameterType="com.ths.platform.entity.BookInfo" resultType="java.lang.Integer">
 select count(*) from t_book t
<where>
<if test="title !=null and title !='' ">
 title = #{title} 
</if>
<if test="author !=null and author !='' "> 
 AND author = #{author}
</if>
</where> 
</select>

我们用 where标签 代替。

相关文章
|
8月前
|
Python
我这样回答多线程并发,面试官非要跟我做朋友!
我这样回答多线程并发,面试官非要跟我做朋友!
93 0
|
12月前
|
存储 设计模式 缓存
新来了个同事,代码命名规范是真优雅呀!代码如诗!!
新来了个同事,代码命名规范是真优雅呀!代码如诗!!
|
存储 缓存 监控
新来了个同事,代码命名规范是真优雅呀!代码如诗!! 上
新来了个同事,代码命名规范是真优雅呀!代码如诗!! 上
|
设计模式 XML 缓存
新来了个同事,代码命名规范是真优雅呀!代码如诗!! 下
新来了个同事,代码命名规范是真优雅呀!代码如诗!! 下
|
存储 JavaScript 算法
新来个大厂同事,数据库设计的居然这么漂亮,佩服!
新来个大厂同事,数据库设计的居然这么漂亮,佩服!
|
SQL 关系型数据库 MySQL
新来的同事问我 where 1=1 是什么意思。。还有谁不会?
新来的同事问我 where 1=1 是什么意思。。还有谁不会?
新来的同事问我 where 1=1 是什么意思。。还有谁不会?
|
芯片
程序人生 - 手上总有静电该怎么处理?
程序人生 - 手上总有静电该怎么处理?
111 0
程序人生 - 手上总有静电该怎么处理?
|
存储 Java 数据处理
新来的实习生连文件操作都不会,被老师傅骂了,有点委屈~
今天,是鸭哥面试系列的第 4 篇。 工作时,你的项目需要操作文件吗?
164 0
新来的实习生连文件操作都不会,被老师傅骂了,有点委屈~
|
存储 Java 编译器
学妹一反常态主动联系我,我要不要答应帮她?
之前在学校举办的活动上,认识了一个学妹。我死磨硬泡终于加了她的微信,经常给她发微信。 可是她总是对我爱答不理的,我心里总有一天让你高攀不起,后来就很少联系了。今天突然主动联系我:
300 0
学妹一反常态主动联系我,我要不要答应帮她?
|
前端开发 程序员 Linux
10年程序员怒斥:只会八股文没用,公司招你来是做项目的,不是背题的……
前段时间跟一个老同事去出项目,我请他喝咖啡。闲聊之间得知他已经在这行干了十年并且在北京成家买房,我肃然起敬,啪!的一下就站起来了。同事摆摆手示意我坐下说话,收手的时候顺带摸了两下稀疏的头发,满是自豪。
442 0