欢迎关注方志朋的博客,回复”666“获面试宝典

来源:juejin.cn/post/7030076565673213989


写在前面

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

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 可以很方便的解决我们条件为空的问题,那么这么写 有什么问题吗 ?

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

实测

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

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

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

对比上面两种我们会发现 可以看到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标签代替。

如果本文对你有帮助的话,请不要吝啬你的赞,谢谢!

热门内容:
  • 增加了一行代码,让我们提高了 3000% 的性能

  • MySQL + JSON = 王炸!!

  • JetBrains 宣布:IntelliJ 平台彻底停用 Log4j 组件,建议切换至 java.util.logging

  • 面试官:private修饰的方法可以通过反射访问,那么private的意义是什么?

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡

新来的同事问我 where 1=1 是什么意思相关推荐

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

    写在前面 新的同事来之后问我where 1=1 是什么有意思,这样没意义啊,我笑了.今天来说明下. where 1=1 先来看一段代码 <select id="queryBookInf ...

  2. 【234期】新来的同事问我 where 1=1 是什么意思?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每天 08:15 更新文章,每天进步一点点... ...

  3. 问:新来的同事都自愿996,这是内卷还是努力啊?

    有同学问:新来的同事都自愿996,这是内卷还是努力啊? 回答一 作者:流浪的蛤蟆 来源:知乎 为国家的前途努力,并且放弃自己的利益,叫做奉献. 为自己的前途努力,叫做努力 为其他人或者事物,比如说为公 ...

  4. 公司新来的同事离职了

    我来这家公司,已经有5个月了.开始,来的时候,公司的软件工程师都离职了,只一留下一个.后来,才知道本来他也是要走的,老板给他涨工资留下来了.在我来之前两个也新来一个同事,就是这个同事,现在要离职了.我 ...

  5. lsdyna如何设置set中的node_list_牛逼~新来的同事,100 页Word页眉页脚设置只需5秒!成功征服老板!...

    老板让你设置文档的页眉页脚或删除页眉页脚,结果你花了半天时间才搞定,而且稍微有修改就需要重新来过,而新来的同事,却可以轻松搞定,怎么回事呢?那是因为你不知道这2个高效操作技巧,下面跟着Word妹一同来 ...

  6. 公司新来的同事一顿操作把大家整懵了,问了他的经历细思极恐。。。

    2021年仅剩下四分之一,没想到公司来了个新同事,一看是个二本生,还是非科班出身,刚30岁... 结果没想到人家上来就把现有项目的性能优化了一遍,直接给公司节省了一半的成本,这种"王炸&qu ...

  7. 某程序员发现新来女同事简历造假!原来是培训机构出身!纠结怎么处理,网友评论亮了!...

    请点击上面 一键关注! 发现新入职的程序员同事简历造假,不是正规大学,而是培训出来的,这种情况下应该举报,还是应该假装不知道? 一个程序员就遇到了这样的窘境,发帖问大家"应不应该事不关己高高 ...

  8. viito为什么不去新说唱_为什么问责制的说唱不好

    viito为什么不去新说唱 开放的组织要求强调责任制. 本月,Opensource.com的开放组织社区在其Twitter上的常规#OpenOrgChat中解决了问责制的更多问题. 请查看以下内容概述 ...

  9. 新来的同事把公司现有项目的性能优化了一遍,来看看他是怎么做到的

    公司新来了个同事,级别比我高一级,技术一流,来了之后把现有项目的性能优化了一遍,给公司省了不少成本. 后来才知道,他竟然是个「把烂牌打出王炸」的存在.他叫老徐,我希望通过他的故事,帮你找到些可复制的方 ...

最新文章

  1. 搭建Mantis 缺陷管理系统(转)
  2. 分别是什么意思_你知道抗震支架T和TL分别代表什么意思?
  3. IOS开发笔记16-Object-C中的属性
  4. CIKM 2021 | 基于异质图学习的搜索广告关键词推荐
  5. 最常问的MySQL面试题集合
  6. tensorflow图形识别_手把手教你使用TF服务将TensorFlow模型部署到生产环境
  7. 《丁丁历险记系列之委托》-- 摘自http://www.cnblogs.com/xfxxx/archive/2010/04/03/1703839.html...
  8. Win7梦幻桌面字体有问题怎么办
  9. java HTML5 学习资料汇总
  10. Android手游lua脚本的加密与解密
  11. 深度卷积神经网络(一)
  12. MySQL 分页查询
  13. oom 如何避免 高并发_高并发下的内存管理技巧
  14. 通过有线网卡共享无线网络
  15. 高精度NTC测温的硬件电路以及软件设计
  16. android格式化通讯录
  17. js除法保留小数_javascript(js)的小数点乘法除法问题详解
  18. 科目三远光灯怎么开图解?科三远光灯是往上还是往下
  19. (78)--用框架爬取招聘信息
  20. 无缝漫游11k,11r, 11v

热门文章

  1. 在列表显示某个内容,但数据表没有这个字段
  2. 2018-3-20论文(一种新的群体智能算法--狼群算法)笔记一(引言中提到的的一些智能算法,以及自己的感想)
  3. 超级挂载 实现过程-代码
  4. 读梦断代码有感(1)2019.2.05
  5. css中position的几个值
  6. Jerry眼中的SAP客户数据模型
  7. apicloud 基础
  8. python3 面向对象(一)
  9. [Educational Codeforces Round 16]A. King Moves
  10. 如何成为一个好的测试工程师(转载,大意)