SQLwhere 1=1

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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 倍,都可以会出现问题。不要停止思考和学习!

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2天前
|
弹性计算 人工智能 安全
对话 | ECS如何构筑企业上云的第一道安全防线
随着中小企业加速上云,数据泄露、网络攻击等安全威胁日益严重。阿里云推出深度访谈栏目,汇聚产品技术专家,探讨云上安全问题及应对策略。首期节目聚焦ECS安全性,提出三道防线:数据安全、网络安全和身份认证与权限管理,确保用户在云端的数据主权和业务稳定。此外,阿里云还推出了“ECS 99套餐”,以高性价比提供全面的安全保障,帮助中小企业安全上云。
对话 | ECS如何构筑企业上云的第一道安全防线
|
10天前
|
调度 云计算 芯片
云超算技术跃进,阿里云牵头制定我国首个云超算国家标准
近日,由阿里云联合中国电子技术标准化研究院主导制定的首个云超算国家标准已完成报批,不久后将正式批准发布。标准规定了云超算服务涉及的云计算基础资源、资源管理、运行和调度等方面的技术要求,为云超算服务产品的设计、实现、应用和选型提供指导,为云超算在HPC应用和用户的大范围采用奠定了基础。
179609 21
|
19天前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
9550 27
|
4天前
|
机器学习/深度学习 分布式计算 供应链
阿里云先知安全沙龙(上海站) ——大模型基础设施安全攻防
大模型基础设施的安全攻防体系涵盖恶意输入防御和基础设施安全,包括框架、三方库、插件、平台、模型和系统安全。关键漏洞如CVE-2023-6019(Ray框架命令注入)、CVE-2024-5480(PyTorch分布式RPC)及llama.cpp中的多个漏洞,强调了代码安全性的重要性。模型文件安全方面,需防范pickle反序列化等风险,建议使用Safetensors格式。相关实践包括构建供应链漏洞库、智能化漏洞分析和深度检测,确保全方位防护。
|
7天前
|
JSON 分布式计算 数据处理
加速数据处理与AI开发的利器:阿里云MaxFrame实验评测
随着数据量的爆炸式增长,传统数据分析方法逐渐显现出局限性。Python作为数据科学领域的主流语言,因其简洁易用和丰富的库支持备受青睐。阿里云推出的MaxFrame是一个专为Python开发者设计的分布式计算框架,旨在充分利用MaxCompute的强大能力,提供高效、灵活且易于使用的工具,应对大规模数据处理需求。MaxFrame不仅继承了Pandas等流行数据处理库的友好接口,还通过集成先进的分布式计算技术,显著提升了数据处理的速度和效率。
|
23天前
|
Cloud Native Apache 流计算
资料合集|Flink Forward Asia 2024 上海站
Apache Flink 年度技术盛会聚焦“回顾过去,展望未来”,涵盖流式湖仓、流批一体、Data+AI 等八大核心议题,近百家厂商参与,深入探讨前沿技术发展。小松鼠为大家整理了 FFA 2024 演讲 PPT ,可在线阅读和下载。
5169 15
资料合集|Flink Forward Asia 2024 上海站
|
3天前
|
机器学习/深度学习 人工智能 安全
通义视觉推理大模型QVQ-72B-preview重磅上线
Qwen团队推出了新成员QVQ-72B-preview,这是一个专注于提升视觉推理能力的实验性研究模型。提升了视觉表示的效率和准确性。它在多模态评测集如MMMU、MathVista和MathVision上表现出色,尤其在数学推理任务中取得了显著进步。尽管如此,该模型仍存在一些局限性,仍在学习和完善中。
|
1月前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
15天前
|
Docker 容器
|
18天前
|
消息中间件 人工智能 运维
12月更文特别场——寻找用云高手,分享云&AI实践
我们寻找你,用云高手,欢迎分享你的真知灼见!
1338 76