20240704每日后端------聊聊 mybatis的 where 1=1

目标

最近,在项目中使用MyBatis进行SQL脚本编写时,我遇到了以“WHERE 1=1”开头的WHERE子句的做法,以简化多个条件的串联。这里有一个例子来讨论这种技术以及“WHERE 1=1”是否对性能有任何影响。

<select id="" parameterType="">
    SELECT * FROM users 
    WHERE 1=1
        <if test="userName != null">
            AND user_name = #{userName}
        </if>
        <if test="userAge != null">
            AND user_age = #{userAge}
        </if>
        <if test="userSex != null">
            AND user_sex = #{userSex}
        </if>
</select>

讨论MyBatis中连接条件的两种常见做法

1、第一种where

<select id="" parameterType="">
    SELECT * FROM users 
    WHERE 1=1
        <if test="userName != null">
            AND user_name = #{userName}
        </if>
        <if test="userAge != null">
            AND user_age = #{userAge}
        </if>
        <if test="userSex != null">
            AND user_sex = #{userSex}
        </if>
</select>

2、第二种
MyBatis 提供了一个 标记,仅当至少有一个条件计算结果为 true 时,该标记才会插入 WHERE 子句。如果 AND 或 OR 之前没有有效的语句,则 元素将删除它们。

<select id="" parameterType="">
    SELECT * FROM users 
    <where>
        <if test="userName != null">
            AND user_name = #{userName}
        </if>
        <if test="userAge != null">
            AND user_age = #{userAge}
        </if>
        <if test="userSex != null">
            AND user_sex = #{userSex}
        </if>
    </where>
</select>

性能影响

使用“WHERE 1=1”和 标签的性能差异在于前者对SQL查询性能的优化,而后者则在于动态生成SQL语句。我们来详细分析一下:
1、mysql版本

SELECT VERSION(); -- 5.7.44

插入数据:

CREATE TABLE IF NOT EXISTS users
(
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Auto-increment ID',
  name VARCHAR(20) COMMENT 'Name',
  age TINYINT COMMENT 'Age'
) ENGINE = INNODB;

INSERT INTO users (name, age) VALUES ('John', 18), ('Jane', 19), ('Doe', 20), ('Smith', 21);

在5.7以上版本中,SQL查询优化将消除“1=1”部分,不影响索引。不过值得注意的是,较低版本可能会受到一些影响,值得关注。

EXPLAIN SELECT * FROM users WHERE 1=1 AND name = 'John';
SHOW WARNINGS;

优化后的 SQL 表明“1=1”部分已被查询优化器优化掉,因此不会显着影响整体性能。

性能比较

– With “WHERE 1=1” AND a condition
SELECT * FROM users WHERE 1=1 AND name = ‘John’;
– Execution Time: 0.046s

– With just “WHERE 1=1”
SELECT * FROM users WHERE 1=1;
– Execution Time: 0.046s

与由 MySQL 服务器的查询优化器处理的“WHERE 1=1”相比, 标签处理动态 SQL 构造。然而,它不会显着影响性能,因为底层动态 SQL 生成并不太复杂。

结论

where 1=1 和 标记都是连接条件的常见做法,对性能没有重大影响。他们之间的选择可以基于团队标准。此外,这些方法的性能不受处理的数据量的影响,因为每次执行仅处理一次,因此即使对于大型数据集,也不存在性能差异。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/782713.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

限流实现-小工具

需求描述 写一个1秒两个的限流工具类&#xff0c;2r/s public class LimitHelper {private int maxLimit;private Semaphore semaphore;private int timeoutSeconds;public LimitHelper(int maxLimit, int timeoutSeconds) {this.maxLimit maxLimit;semaphore new Semaphore…

产品经理-的职业发展(9)

找一份好工作&#xff0c;就是为了获得更好的职业发展&#xff0c;下面分别给大家介绍下大、中、小型公司的职业发展路径 中小型公司 中小型公司的规模往往相对不大&#xff0c;又处于飞速发展过程中&#xff0c;培养体系和晋升标准都不够成熟&#xff0c;所以实际的职业发展路…

如何大幅减少 Vue.js 中的包大小和加载时间,提升用户体验!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 你知道吗,根据Google 的一项研究,如果网站加载时间超过 3 秒,53% 的移动用户会离开该网站? 性能优化是一个经常讨论的话题,但很多开发人员并不关心提高应用的速度。 在前端开发中,优化包大小和加载时间对于提升用户体…

电力设备巡检管理系统

电力设备巡检管理系统是一种基于计算机技术和网络通信技术的智能化管理系统&#xff0c;旨在提高电力设备巡检的效率、准确性和安全性。以下是对该系统的详细介绍&#xff1a; 一、系统概述 电力设备巡检管理系统通过实时采集、传输和分析电力设备的数据&#xff0c;帮助电力企…

基于java+springboot+vue实现的在线课程管理系统(文末源码+Lw)236

摘要 本文首先介绍了在线课程管理系统的现状及开发背景&#xff0c;然后论述了系统的设计目标、系统需求、总体设计方案以及系统的详细设计和实现&#xff0c;最后对在线课程管理系统进行了系统检测并提出了还需要改进的问题。本系统能够实现教师管理&#xff0c;科目管理&…

哪款护眼大路灯比较值得入手?五款值得入手的护眼大路灯推荐

哪款护眼大路灯比较值得入手&#xff1f;选择一款优质的大路灯很重要&#xff01;而对于市面上五花八门的大路灯型号&#xff0c;这给刚了解大路灯的萌新们增加了难度&#xff0c;为了帮助大家准确的寻找到一款合适的大路灯&#xff0c;我也是花费多个月实测了市面上比较热门的…

@金融安全专业人士和风险管理决策者,必读白皮书现开放免费下载!

加快建设金融强国&#xff0c;是中国经济长远发展的战略抉择&#xff0c;更是在经济全球化进程中维护国际金融安全的重要举措&#xff0c;而防控金融风险是建设金融强国的重要保障。 本月最新发布物&#xff0c;聚焦「安全」主题&#xff0c;尤其为金融行业的安全专家&#xff…

【计算机毕业设计】018基于weixin小程序实习记录

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

elasticSearch快速了解

elasticSearch&#xff1a;经常用于搜索引擎&#xff0c;我们用的百度搜索和github上的搜索都是用的搜索引擎&#xff0c;它是对输入内容进行分析&#xff0c;然后查询&#xff0c;不像数据库模糊搜索的like一样必须含用你输入的全部内容。 elasticSearch优势&#xff1a;支持…

ideaSSM校医院管理系统-计算机毕业设计源码82325

基于ideaSSM校医院管理系统设计 摘 要 随着信息技术的快速发展和广泛应用&#xff0c;传统的校医院管理模式已经难以满足日益增长的管理需求和服务质量要求。为了提升校医院管理效率和服务水平&#xff0c;本文提出了一种基于IDEASSM的校医院管理系统设计方案。该系统以先进的…

SQL 创建一个actor表,包含如下列信息

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 创建一个acto…

CentOS 安装 annie/lux,以及 annie/lux 的使用

annie 介绍 如果第一次听到 annie 想必都会觉得陌生&#xff0c;annie 被大家称为视频下载神器&#xff0c;annie 作者介绍说可以下载抖音、哔哩哔哩、优酷、爱奇艺、芒果TV、YouTube、Tumblr、Vimeo 等平台的视频。 githup&#xff1a;https://github.com/pingf/annie 支持…

『C++成长记』string模拟实现

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ ​ 目录 一、存储结构 二、默认成员函数 &#x1f4d2;2.1构造函数 &#x1f4d2;2.…

认证资讯|Bluetooth SIG认证

在当今高度互联的世界中&#xff0c;无线技术的普及已经成为我们生活和工作中不可或缺的一部分。作为领先的无线通信技术之一&#xff0c;Bluetooth技术以其稳定性、便捷性和广泛的应用场景而备受青睐。然而&#xff0c;要想在激烈的市场竞争中脱颖而出&#xff0c;获得Bluetoo…

景联文科技打造高质量图文推理问答数据集,赋能大语言模型提升推理能力

大语言模型在处理推理任务时&#xff0c;不同于人类能够反思错误并修正思维路径&#xff0c;当它遇到自身知识盲区时&#xff0c;缺乏自我校正机制&#xff0c;往往导致输出结果不仅无法改善&#xff0c;反而可能变得更不准确。 需要依赖外部的知识库和推理能力来克服其在理解和…

Java锁升级:无锁 → 偏向锁 → 轻量级锁 → 重量级锁

说明 JDK1.6为了减少获得锁和释放锁所带来的性能消耗&#xff0c;引入了“偏向锁”和“轻量级锁”&#xff0c;所以在JDK1.6里锁一共有四种状态&#xff0c;无锁状态&#xff0c;偏向锁状态&#xff0c;轻量级锁状态和重量级锁状态&#xff0c;它会随着竞争情况逐渐升级。锁可以…

Postgresql - 用户权限数据库

1、综述 在实际的软件项目开发过程中&#xff0c;用户权限控制可以说是所有运营系统中必不可少的一个重点功能&#xff0c;根据业务的复杂度&#xff0c;设计的时候可深可浅&#xff0c;但无论怎么变化&#xff0c;设计的思路基本都是围绕着用户、部门、角色、菜单这几个部分展…

通过SimU-Net进行同时深度学习体素分类的纵向CECT扫描肝病灶变化分析| 文献速递-深度学习自动化疾病检查

Title 题目 Liver lesion changes analysis in longitudinal CECT scans by simultaneous deep learning voxel classification with SimU-Net 通过SimU-Net进行同时深度学习体素分类的纵向CECT扫描肝病灶变化分析 01 文献速递介绍 影像学随访是对影像学研究的解读&#x…

【c++】C++ IO流

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…

深圳唯创知音革新健康监测!语音播报,蓝牙传输,电量检测—全能型智能血压计三大方案,让关爱更“声”动人心

01&#xff1a;背景概述 在快节奏的现代生活中&#xff0c;高血压已成为一种常见的健康问题&#xff0c;高血压不仅仅存在于老年人群中&#xff0c;这种慢性健康问题也慢慢往青中年人群蔓延&#xff0c;它被称为“沉默的杀手”&#xff0c;因为很多时候患者并没有明显的症状。…