当前位置: 首页 > news >正文

Mysql中使用where 1=1有什么问题吗

昨天偶然看见一篇文章,提到说如果在mysql查询语句中,使用where 1=1会有性能问题??

这着实把我吸引了,因为我项目中就有不少同事,包括我自己也有这样写的。为了不给其他人挖坑,赶紧学习一下,这样写sql到底有没有性能问题?

where 1=1的使用场景

我们来看下,where 1=1实际是怎么使用的, 先来看一段SQL

<select id="selectCmsCourseList" parameterType="java.util.Map" resultMap="CourseMap">SELECTa.id,a.category_id,a.model_id,b.*FROMcms_content aLEFT JOIN cms_course b ON a.id = b.idWHERE 1=1<if test="courseName != null and courseName != ''">AND b.course_name like concat(concat("%",#{courseName}),"%")</if><if test="disabled != null">AND a.disabled = #{disabled}</if><if test="categoryId != null">AND a.category_id = #{categoryId}</if>
</select>

如果用过mybatis的童鞋,看到这段代码应该很熟悉了吧,这里使用where 1=1的作用,就是为了方便后面的条件,能通过if判断,使用AND连接起来,这样即使后面if全部是false,没有参数,这个sql也不会报错。

where 1=1的替换方案

其实上面的这个写法,如果用mybatis,完全可以用where标签来替换,如:

<select id="selectCmsCourseList" parameterType="java.util.Map" resultMap="CourseMap">SELECTa.id,a.category_id,a.model_id,b.*FROMcms_content aLEFT JOIN cms_course b ON a.id = b.id<where><if test="courseName != null and courseName != ''">AND b.course_name like concat(concat("%",#{courseName}),"%")</if><if test="disabled != null">AND a.disabled = #{disabled}</if><if test="categoryId != null">AND a.category_id = #{categoryId}</if></where>
</select>

如果你使用了这个写法,就不存在1=1的问题了,所以也不用纠结,但本着打破砂锅问到底的精神,我们还是得探究一下使用1=1到底有没有性能问题

使用where 1=1有性能问题吗?

先来问问AI

可以看到,AI给到的答复是,基本没有性能问题,更多的是代码风格和可读性!

亲自检测

为了跟进一步测试,我们来写个SQL看看实际性能是否有差别

  1. explain select * from user;

  2. explain select * from user where 1=1;

  3. explain select * from user where id = 8;

  4. explain select * from user where 1=1 and id = 8;

可以看到示例1和示例2, 示例3和示例4,这两组写法,都是有个1=1的区别,但性能都是一样的,因此我们基本可以判定,这个写法,对性能是没有影响的。

总结

如果你在项目中也有使用where 1=1写的SQL,如果从可读性或者代码风格考虑,建议优化掉,但如果担心性能问题,则大可不必过多考虑~

http://www.lryc.cn/news/371099.html

相关文章:

  • 中心极限定理的MATLAB例
  • 定义input_password函数,提示用户输入密码.如果用户输入长度<8,抛出异常,如果用户输入长度>=8,返回输入的密码
  • 【深度学习】IP-Adapter 和 InstantID 的核心机制比较
  • JEPaaS 低代码平台 j_spring_security_check SQL注入漏洞复现
  • 天锐绿盾 | 无感知加密软件、透明加密系统、数据防泄漏软件
  • kubernetes(k8s)集群部署(2)
  • Git操作指南
  • 全域推广和标准推广哪个更好。谁更容易获客?
  • 首张地下地图!D-Wave 专用量子计算机助力沙特阿美完成地震成像
  • 机器学习分类及算法
  • 电容器连接到 PCB 电源层的过孔配置
  • springboot+shiro+jwt 兼容session和token
  • CSS Display(显示)
  • 【PB案例学习笔记】-20制作一个超链接按钮
  • Django中使用下拉列表过滤HTML表格数据
  • Linux基础 (十五):TCP 协议特点和UDP协议
  • python替换word文件中的图片
  • Servlet-01
  • C语言:链表
  • 【git使用二】gitee远程仓库创建与本地git命令用法
  • 明星百科大全PHP网站源码
  • 白酒:茅台镇白酒的品鉴会与文化交流活动
  • python中列表结构在点云数据处理中用法
  • 土耳其(小亚细亚)历史上的各个阶段
  • Windows下基于Frida查看内存基址和修改寄存器
  • 2024中国网络安全产品用户调查报告(发布版)
  • 手写图片懒加载
  • 大型语言模型(LLMs)的后门攻击和防御技术
  • 力扣2594.修车的最少时间
  • 攻防演练之-成功的钓鱼邮件溯源