SQLwhere 1=1

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: where 1=1 到底有什么妙用?

刚入行的同学,看到在 SQL 语句中出现 where 1 = 1 这样的条件可能会有所困惑,而长时间这样使用的朋友可能又习以为常。

那么,你是否还记得当初为什么要这样写?是否有性能问题?有没有更好的写法?

今天这篇文章,带大家从头到尾梳理一下 where 1 = 1 的使用及改进,或许你能从中得到更多意想不到的收获。

where 1=1 的作用
如果要问在 SQL 语句的 where 条件中多加 1=1 目的是什么,很简单:使得 where 条件语句永远为真。 本质上就是虽然加了 where 条件,但实际上永远为真,也就相当于没有加任何约束条件。

使用该语句的场景主要是:动态构建 SQL 语句。

String sql  =  "select * from t_user  where 1=1 "; 
if(!b.equals("")){
 sql += "and  b='"+b+"'";
}

在上述语句拼写时,使用 where 1=1,当 b 不等于空时,可以直接拼接 “and” 语句,而不会导致语法错误。如果没有 where 1=1,原来的 SQL 语句就变成(假设 b 传入了 "abc"):

select * from t_user  where and  b= 'abc';

很明显,上述 SQL 语句会有语法错误。所以,之所以添加 1=1,就是为了方便 SQL 拼接。

从另外一个角度来讲,不仅仅 1=1 可以这样使用,像:1<>2、2>1、'a'='a' 等表达式,只要结果为 true,都可以如此使用。

where 1<>1
上面讲了 where 1=1 的来历及使用,那么你是否使用过 where 1<>1 的形式呢?

你还别说,where 1<>1 也是有使用场景的,比如:只获取表结构而不取数据。

create table t_temp as select * from t_user  where 1<>1

上述语句,创建了一个与 t_user 表结构一样但没有任何数据的新表 t_temp。

当然,除了表结构,其他的结构也可以如此使用。

性能问题
有人说,使用 where 1=1 可能会有性能问题,咱们直接来实验一下。

mysql 8.0.18,t_user 表,id_no 字段有索引:

xplain select * from t_user where id_no = 'Tom25';
explain select * from t_user where 1=1 and id_no = 'Tom25';

执行上述两行 SQL 语句,explain 结果都是如下:
00ec572704da4e7b0510cac6c5a5f0fd.jpg
也就是说,1=1 这样条件,并不影响索引和性能,从 explain 结果上可以看出两者并无本质区别。

之所以不同的 SQL 语句,呈现了相同的结果,这是因为被 Mysql 优化了。Mysql 在处理指令时,会对 1=1 这类无效的条件进行优化处理。这个与 Java 的编译器有些像,很多无效的判断或语句,在编译成字节码时,编译器会进行优化处理。

改进
虽然说 1=1 会被优化器优化掉,但优化操作本身还是会消耗 MySQL 的性能的,如果能够从根本上避免这种情况的出现,那不就更好了。

以 Mybatis 为例,在使用 where 1=1 时,通常会是如下写法:
image.png

这里 where 1=1 的作用同上。但如果你更进一步去了解 Mybatis 的语法及标签,可以使用标签来代替 where 1=1:
image.png

这样,在查询数据比较大的情况下,可减少 MySQL 为了优化 1=1 这样的条件而损失的性能。

总结
本文我们从习以为常的 where 1=1 使用聊起,聊了它的使用场景、MySQL 对其优化、以及延伸出来的 where 1<>1 的使用,同时基于常见的 Mybatis 框架,如何进一步改进。

其实,写这篇文章想传达的一个思想就是:再小,再习以为常的事物,如果你去思考、研究都会学到很多相关的知识点,也都可以对其进一步优化。

曾经有一个技术大佬说过:再简单的一段代码,如果将访问量扩大 100 倍、1000 倍,都可以会出现问题。不要停止思考和学习!

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
存储 运维 安全
云上金融量化策略回测方案与最佳实践
2024年11月29日,阿里云在上海举办金融量化策略回测Workshop,汇聚多位行业专家,围绕量化投资的最佳实践、数据隐私安全、量化策略回测方案等议题进行深入探讨。活动特别设计了动手实践环节,帮助参会者亲身体验阿里云产品功能,涵盖EHPC量化回测和Argo Workflows量化回测两大主题,旨在提升量化投研效率与安全性。
云上金融量化策略回测方案与最佳实践
|
8天前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
8285 19
|
12天前
|
Cloud Native Apache 流计算
资料合集|Flink Forward Asia 2024 上海站
Apache Flink 年度技术盛会聚焦“回顾过去,展望未来”,涵盖流式湖仓、流批一体、Data+AI 等八大核心议题,近百家厂商参与,深入探讨前沿技术发展。小松鼠为大家整理了 FFA 2024 演讲 PPT ,可在线阅读和下载。
4451 10
资料合集|Flink Forward Asia 2024 上海站
|
12天前
|
自然语言处理 数据可视化 API
Qwen系列模型+GraphRAG/LightRAG/Kotaemon从0开始构建中医方剂大模型知识图谱问答
本文详细记录了作者在短时间内尝试构建中医药知识图谱的过程,涵盖了GraphRAG、LightRAG和Kotaemon三种图RAG架构的对比与应用。通过实际操作,作者不仅展示了如何利用这些工具构建知识图谱,还指出了每种工具的优势和局限性。尽管初步构建的知识图谱在数据处理、实体识别和关系抽取等方面存在不足,但为后续的优化和改进提供了宝贵的经验和方向。此外,文章强调了知识图谱构建不仅仅是技术问题,还需要深入整合领域知识和满足用户需求,体现了跨学科合作的重要性。
|
20天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
8天前
|
人工智能 容器
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
本文介绍了如何利用千问开发一款情侣刮刮乐小游戏,通过三步简单指令实现从单个功能到整体框架,再到多端优化的过程,旨在为生活增添乐趣,促进情感交流。在线体验地址已提供,鼓励读者动手尝试,探索编程与AI结合的无限可能。
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
|
1月前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
104585 10
|
7天前
|
消息中间件 人工智能 运维
12月更文特别场——寻找用云高手,分享云&AI实践
我们寻找你,用云高手,欢迎分享你的真知灼见!
660 43
|
5天前
|
弹性计算 运维 监控
阿里云云服务诊断工具:合作伙伴架构师的深度洞察与优化建议
作为阿里云的合作伙伴架构师,我深入体验了其云服务诊断工具,该工具通过实时监控与历史趋势分析,自动化检查并提供详细的诊断报告,极大提升了运维效率和系统稳定性,特别在处理ECS实例资源不可用等问题时表现突出。此外,它支持预防性维护,帮助识别潜在问题,减少业务中断。尽管如此,仍建议增强诊断效能、扩大云产品覆盖范围、提供自定义诊断选项、加强教育与培训资源、集成第三方工具,以进一步提升用户体验。
635 243
|
2天前
|
弹性计算 运维 监控
云服务测评 | 基于云服务诊断全方位监管云产品
本文介绍了阿里云的云服务诊断功能,包括健康状态和诊断两大核心功能。作者通过个人账号体验了该服务,指出其在监控云资源状态和快速排查异常方面的优势,同时也提出了一些改进建议,如增加告警配置入口和扩大诊断范围等。