新的同事来之后问我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标签代替。

弦外之音
感谢你的阅读,如果你感觉学到了东西,您可以点赞,关注。也欢迎有问题我们下面评论交流
————————————————
版权声明:本文为CSDN博主「清朝程序猿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45987961/article/details/121736642

where 1=1 是什么有意思相关推荐

  1. 7个小众却很有意思的工具推荐,每一个都是大宝藏!

    作为一个工具控,自己也体验了上百个软件和网站,今天给大家推荐7个小众很有意思的工具,喜欢的话记得点赞支持哦~ 1.正版中国 正版中国是一个分享正版软件限时免费信息的网站.有很多优质的正版软件会做一些限 ...

  2. 发现一个有意思的博主(科研工作者)

    科学网  这个社区好像都是大学老师? 发现一个有意思的博主,王立新的博客: http://blog.sciencenet.cn/u/fuzzywanglixin 博主写的文章有点意思啊,感觉很是犀利. ...

  3. 一个有意思的逻辑训练题目

    题目如下: 有两个大于1小于100的自然数x,y,老师告诉小明两个数的和,告诉小强两个数的积.已知小明和小强足够聪明. 下面是两个人的对话: 小强:我不知道这两个数是多少.(<沉默中>.. ...

  4. 一个有意思的项目,快上车!

    不啰嗦,这个有意思的项目是:大家一起来写 2022 日历吧! 别着急,我来慢慢交代两件事儿: 一.编程日历<了不起的程序员2021>"开源"了: 二.编程日历<了 ...

  5. debug打印的有意思的方法

    #define DEBUG(FORMAT,...) \printf("[ %s] [ %s %d] " FORMAT"\n",__FILE__,__func__ ...

  6. 一个很有意思的问题: 揭示了计算机程序问题的一般处理思路

    2019独角兽企业重金招聘Python工程师标准>>> 一个很有意思的问题: 揭示了计算机程序问题的一般处理思路 === 问题标题: 如何统计汉字的字数? 问题内容: 我想统计: & ...

  7. 外包公司做遗留项目有意思么?

    过年后,在目前公司的工作就要告一段落了,又恰逢年终,终觉得还是要总结点什么 背景介绍 考虑了一下,似乎技术上没有什么太多可说的,再加上外包项目也不能透露太多客户的东西.3年多做得都是同一个Accoun ...

  8. 一道有意思的css面试题,9宫格

    今天出去面试,遇到了一道有意思的面试题:写一个css9宫格,要求边框是5px,鼠标hover的时候边框变色. 当时没有答出来,回来想了两个写法感觉都不是最优解. 1.html部分 <ul> ...

  9. 一次非常有意思的sql优化经历

    一次非常有意思的sql优化经历 原文:一次非常有意思的sql优化经历 场景 我用的数据库是mysql5.6,下面简单的介绍下场景 课程表 create table Course(c_id int PR ...

  10. 分摊的意思_接了两单顺风车遇到几个有意思乘客,后来把顺风车软件删了

    我以前是一个滴滴司机,有时候会接到一些跨跨城的订单,就注册了一个滴滴顺风车,毕竟有时候是接个顺风车,会省点油钱和过路费用,这几年的时间内,只接了两个顺风车的订单,没想到遇到了挺有意思的几个乘客. 大概 ...

最新文章

  1. arcgis java api_Arcgis API For Javascript下载与安装
  2. MySQL账户安全设置
  3. 【物联网开发实战】- 设备上云方案详解?
  4. Android平台实现Unity3D下RTMP推送
  5. python 用PIL Matplotlib处理图像的基本操作
  6. flask异步操作_从Flask到FastAPI的平滑迁移
  7. VS中Eric觉得好用的快捷键
  8. php路径详解,详解与PHP路径相关的dirname,realpath,__FILE__函数
  9. c#数据库事务锁类型
  10. 爬虫之User-Agent
  11. 史上最全面的Javaweb完整学习教程,Java小白必备!
  12. 苹果手机左上角的数字怎么弄_一键更改手机IP操作方法
  13. Java中异或的操作
  14. Java-Spark系列6-Spark SQL编程实战
  15. 二代身份证号码编码规则
  16. 离散——在谓词演算的推理过程中为什么要先消去存在量词再消去全称量词
  17. A JNI error has occurred, please check your installation and try again
  18. 小学生python编程写游戏_用python教小孩子编程做游戏(上)
  19. 康威定律,作为架构师还不会灵活运用?
  20. Orthanc的REST API — Orthanc Book文档

热门文章

  1. Mask rcnn 代码复现
  2. IDEA的安装和破解;Maven介绍;Object类的学习
  3. pd电源测试-PD电源自动测试系统ATECLOUD-Power
  4. 图像处理中掩膜(mask)的意义
  5. win10快捷方式出现白色图标处理方法
  6. ucore lab4
  7. 博彦科技4亿定增图谋境外软件外包 现金流考验
  8. Apache+Tomcat 动静分离
  9. 边玩游戏边学php,HTML5边玩边学(1)画布实现方法
  10. 绥化学院学报杂志绥化学院学杂志社绥化学院学报编辑部2022年第9期目录