企业网站优化应该怎么做,电子商务网站设计与维护论文,企业做网站的作用,广州网站推广自助文章目录 前言聊聊 mybatis 中多条件拼接的两种常规写法where 11使用 where 标签 性能影响where 11where 标签 总结个人简介 前言
最近在项目中使用 mybatis 写 SQL 使用了 where 11 来简化多条件拼接的写法#xff0c;案例如下#xff0c;借此聊聊多条件拼… 文章目录 前言聊聊 mybatis 中多条件拼接的两种常规写法where 11使用 where 标签 性能影响where 11where 标签 总结个人简介 前言
最近在项目中使用 mybatis 写 SQL 使用了 where 11 来简化多条件拼接的写法案例如下借此聊聊多条件拼接的常见的一些写法以及 where 11 是否存在性能影响。
select id parameterType SELECT * FROM users WHERE 11if testuserName ! null AND user_name #{userName}/ifif testuserAge ! null AND user_age #{userAge }/ifif testuserSex! null AND user_sex #{userSex}/if
/select聊聊 mybatis 中多条件拼接的两种常规写法
where 11
如前言中的示例
select id parameterType SELECT * FROM users WHERE 11if testuserName ! null AND user_name #{userName}/ifif testuserAge ! null AND user_age #{userAge }/ifif testuserSex! null AND user_sex #{userSex}/if
/select使用 where 标签
mybatis 提供 where 标签where 标签只有在一个以上的if条件有值的情况下才去插入WHERE子句。若AND 或 OR 前没有有效语句where 元素会将它们去除。
select id parameterType SELECT * FROM users whereif testuserName ! null AND user_name #{userName}/ifif testuserAge ! null AND user_age #{userAge }/ifif testuserSex! null AND user_sex #{userSex}/if/where
/select性能影响
where 11 和 where 标签两种写法前者性能损耗在 SQL查询性能优化后者在于 SQL 语句动态生成 。下面我们来具体分析一下MySQL 版本
SELECT VERSION();5.7.44# 数据构造 SQL
CREATE TABLE IF NOT EXISTS t_user
(id INT not null auto_increment primary key comment 自增ID,name varchar(20) comment 姓名,age tinyint comment 年龄
)ENGINE INNODB;INSERT INTO t_user ( NAME, age ) VALUES ( 张三, 18 ),( 李四, 19 ),( 王五, 20 ),( 司总, 21 );where 11
在 5.7 以上版本中SQL查询性能优化 会将 11 部分优化掉并不会影响索引但网上有部分资料说在低版本中有一定影响所以需要稍微留意一下。
# 注需要选中一起执行可以查看到优化后的 SQL
explain select * from t_user where 11 AND name 张三;
show warnings;# 优化后的 SQL
/* select#1 */ SELECT
mydatabase.t_user.id AS id,
mydatabase.t_user.name AS name,
mydatabase.t_user.age AS age
FROMmydatabase.t_user
WHERE(mydatabase.t_user.name 张三)从优化后的 SQL 可以看到 11 部分已经被查询优化器优化掉所有对整体的性能影响并不大。
# 性能对比
select * from t_user where 11 AND name 张三OK查询时间: 0.046sselect * from t_user where 11OK查询时间: 0.046swhere 标签
相比于 where 11 在 MySQL 中服务器层由查询优化器进行处理where 标签在动态构建 SQL 中处理但性能也无很大影响因为本质并不是很复杂的动态 SQL 生成。
总结
where 11 和 where 标签是多条件拼接的两种常见写法性能层面而言并没有较大的影响具体选择何种写法可以根据团队的规范决定。此外两种方案的处理与处理的数据量无关一次执行都仅处理一次所以在大数据量下也无性能差异。
个人简介 你好我是 Lorin 洛林一位 Java 后端技术开发者座右铭Technology has the power to make the world a better place. 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。 作为一个 Java 后端技术爱好者我不仅热衷于探索语言的新特性和技术的深度还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。 在我的博客上你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法以帮助你更好地掌握Java编程。 我鼓励互动和建立社区因此请留下你的问题、建议或主题请求让我知道你感兴趣的内容。此外我将分享最新的互联网和技术资讯以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进一起探讨技术世界的无限可能性。 保持关注我的博客让我们共同追求技术卓越。