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.mzph.cn/diannao/26421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ABAP调用JavaScript进行幂乘运算

ECC版本没有内置的ipow运算函数&#xff0c;所以需要进行幂乘运算的话&#xff0c;可以采用调用JavaScript的方式来实现&#xff0c;参考代码如下&#xff1a;

集合java

1.集合 ArrayList 集合和数组的优势对比&#xff1a; 长度可变 添加数据的时候不需要考虑索引&#xff0c;默认将数据添加到末尾 package com.itheima;import java.util.ArrayList;/*public boolean add(要添加的元素) | 将指定的元素追加到此集合的末尾 | | p…

Chrome/Edge浏览器视频画中画可拉动进度条插件

目录 前言 一、Separate Window 忽略插件安装&#xff0c;直接使用 注意事项 插件缺点 1 .无置顶功能 2.保留原网页&#xff0c;但会刷新原网页 3.窗口不够美观 二、弹幕画中画播放器 三、失败的尝试 三、Potplayer播放器 总结 前言 平时看一些视频的时候&#xff…

Linux——自动化运维ansibe

一、自动化运维定义 自动化--- 自动化运维&#xff1a; 服务的自动化部署操作系统的日常运维&#xff1a;日志的备份、临时文件清理、服务器日常状态巡检、&#xff08;几乎包括了linux服务管理、linux 系统管理以及在docker 容器课程中涉及的所有内容&#xff09;服务架构的…

maven学习小结

背景 大佬指路我负责实践 目录结构 maven为项目提供一个标准目录结构 环境配置 下载maven包后解压&#xff0c;配置解压目录的bin到path变量&#xff0c;然后终端mvn -v&#xff0c;有回显则表明maven安装成功 pom POM&#xff0c;Project Object Model&#xff0c;项目对…

01_简单信号的连续和离散形式(2)

1. 单位阶跃信号 1.1离散 离散单位阶跃信号&#xff0c;也称为单位阶跃序列&#xff0c;是一个在离散时间信号分析中基础且重要的信号&#xff0c;用于描述在某个时间点后信号值发生突变的情形。它的定义如下&#xff1a; 离散单位阶跃信号具有以下几个重要性质和应用&#x…

Django中使用下拉列表过滤HTML表格数据

在Django中&#xff0c;你可以使用下拉列表&#xff08;即选择框&#xff09;来过滤HTML表格中的数据。这通常涉及两个主要步骤&#xff1a;创建过滤表单和处理过滤逻辑。 创建过滤表单 首先&#xff0c;你需要创建一个表单&#xff0c;用于接收用户选择的过滤条件。这个表单可…

【CT】LeetCode手撕—21. 合并两个有序链表

目录 题目1-思路2- 实现⭐21. 合并两个有序链表——题解思路 3- ACM实现 题目 原题连接&#xff1a;21. 合并两个有序链表 1-思路 双指针&#xff1a;题目提供的 list1 和 list2 就是两个双指针 通过每次移动 list1 和 list2 并判断二者的值&#xff0c;判断完成后将其 插入…

IDEA项目上传Github流程+常见问题解决

一、Github上创建仓库 项目创建好后如图所示 二、IDEA连接Github远程仓库 管理远程 复制远程地址 定义远程 登录Github 点击进入File->Settings->Version Control->Github登录自己的账号并勾上“√” 三、推送项目 点击推送 修改为main 点击确定&#xff0c;打开远程…

编辑并保存hosts文件

1.以管理员权限打开cmd 2.执行命令 notepad C:\Windows\System32\drivers\etc\hosts 回车后会通过记事本打开hosts文件&#xff0c;然后就可以编辑并保存了。

pdf添加书签的软件,分享3个实用的软件!

在数字化阅读日益盛行的今天&#xff0c;PDF文件已成为我们工作、学习和生活中不可或缺的一部分。然而&#xff0c;面对海量的PDF文件&#xff0c;如何高效地进行管理和阅读&#xff0c;成为了许多人关注的焦点。其中&#xff0c;添加书签功能作为提高PDF文件阅读体验的重要工具…

使用adb通过wifi连接手机

1&#xff0c;手机打开开发者模式&#xff0c;打开无线调试 2&#xff0c;命令行使用adb命令配对&#xff1a; adb pair 192.168.0.102:40731 输入验证码&#xff1a;422859 3&#xff0c;连接设备&#xff1a; adb connect 192.168.0.102:36995 4&#xff0c;查看连接状态:…

GIGE 协议摘录 —— 照相机的标准特征列表(五)

系列文章目录 GIGE 学习笔记 GIGE 协议摘录 —— 设备发现&#xff08;一&#xff09; GIGE 协议摘录 —— GVCP 协议&#xff08;二&#xff09; GIGE 协议摘录 —— GVSP 协议&#xff08;三&#xff09; GIGE 协议摘录 —— 引导寄存器&#xff08;四&#xff09; GIGE 协议…

11.1 Go 标准库的组成

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Unity EasyRoads3D插件使用

一、插件介绍 描述 Unity 中的道路基础设施和参数化建模 在 Unity 中使用内置的可自定义动态交叉预制件和基于您自己导入的模型的自定义交叉预制件&#xff0c;直接创建独特的道路网络。 添加额外辅助对象&#xff0c;让你的场景栩栩如生&#xff1a;桥梁、安全护栏、栅栏、墙壁…

meilisearch,老版本的文档

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…

Excel自定义排序和求和

概览 excel作为办公的常备工具&#xff0c;好记性不如烂笔头&#xff0c;在此梳理记录下&#xff0c;此篇文章主要是记录excel的自定义排序和求和 一. 自定义排序 举个例子 1. 填充自定义排序选项 实现步骤&#xff1a; 选定目标排序值&#xff1b;文件->选项->自定…

取模软件测试版生成的有斜线,但测试字库的功能是好用无限制。只需要自己开发一个字库生成软件。IDA工具,如何搜中文

IDA工具&#xff0c;如何搜中文 在 IDA (Interactive Disassembler) 中搜索中文字符串&#xff0c;可以按照以下步骤操作&#xff1a; 方法一&#xff1a;使用“搜索文本”功能 打开 IDA 并加载目标文件&#xff1a;启动 IDA 并打开你需要分析的二进制文件。打开搜索文本对话…

Allegro光绘Gerber文件、IPC网表、坐标文件、装配PDF文件导出打包

Allegro光绘Gerber文件、IPC网表、坐标文件、装配PDF文件导出打包 一、Gerber文件层叠与参数设置二、装配图文件设置导出三、光绘参数设置四、Gerber孔符图、钻孔表及钻孔文件输出五、输出Gerber文件六、输出IPC网表七、导出坐标文件八、文件打包 一、Gerber文件层叠与参数设置…

一文讲清:生产报工系统的功能、报价以及如何选择

最近这几年&#xff0c;企业越来越注重生产的速度和成本&#xff0c;尤其是“性价比”&#xff0c;生产报工系统已经变成了制造业里不可或缺的一部分。不过&#xff0c;市场上生产报工系统的选择太多&#xff0c;价格也都不一样&#xff0c;这就给很多企业出了个难题&#xff1…