新的同事来之后问我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. vbs字符串正则_VBscript中的正则表达式
  2. Linux_Samba详解
  3. NLP之word2vec:利用 Wikipedia Text(中文维基百科)语料+Word2vec工具来训练简体中文词向量
  4. 静态页中调用动态数据的三种办法
  5. Sqlcmd连接SQL方式(远程机器直接查询SQL)
  6. struct和class之间问题(+引发的个人思考,和对共用体思考)
  7. 在线看大会!就来云栖号!
  8. 如何判断过拟合和欠拟合
  9. [论文阅读] Unsupervised Domain Adaptive Salient Object Detection Through Uncertainty-Aware Pseudo-Label
  10. 多项式拟合(polyfit和polyval)
  11. 华为设备配置基于MSDP的Anycast RP
  12. 如何写一个Vue自定义指令
  13. ios虚拟服务器降级,升级了iOS 12很后悔,没关系手把手教你如何降级!
  14. ArcGIS导入xyz序列并绘制地形图(含等高线、面体积、点距离的计算)
  15. 大桥数据,国外大桥排行榜数据清单,Python爬虫120例第32例
  16. ReferenceError Cannot access ‘xxx‘ before initialization
  17. 2017阿里实习生在线编程题
  18. JDK下载及安装教程(很详细)
  19. matlab 矩阵平均值
  20. 示波器探头如何连接设备?

热门文章

  1. java 打印 小票_java 调收银机打印小票
  2. c语言从键盘输入一个百分制成绩score,C语言程序设计实验实验指导书及答案
  3. 自建SuSE Yast安装源
  4. 如何配置Java和tomcat环境变量
  5. 【中级软考—软件设计师】2操作系统2.5进程资源图【**】:2.5.1进程资源图
  6. [海森推荐] 爱与生命—《机器人管家》
  7. 用python实现AI换脸
  8. 互联网人的时间 vs 普通人的时间
  9. 告别单身+成就霸业,强者必学的定律!!
  10. 亚马逊短视频制作需要注意什么?