Redian新闻
>
源码中常见的 where 1=1 是一种高级优化技巧?

源码中常见的 where 1=1 是一种高级优化技巧?

公众号新闻

点击上方“芋道源码”,选择“设为星标

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

 
来源:blog.csdn.net/weixin_53935287
/article/details/125227028

你是否曾在 SELECT 查询中看到过 WHERE 1=1 条件。我在许多不同的查询和许多 SQL 引擎中都有看过。这条件显然意味着 WHERE TRUE,所以它只是返回与没有 WHERE 子句时相同的查询结果。

此外,由于查询优化器几乎肯定会删除它,因此对查询执行时间没有影响。那么,WHERE 1=1 的作用是什么?这就是我们今天要在这里回答的问题!

WHERE 1=1 会改善查询执行吗?

正如前文中所述,我们预计查询优化器会删除硬编码的 WHERE 1=1 子句,因此我们不应看到查询执行时间减少。为了证实这个假设,让我们在 Navicat 中运行一个有和一个无 WHERE 1=1 子句的 SELECT 查询。

首先,以下是在 Sakila 示例数据库运行的查询,获取从 Lethbridge 商店租借电影的客户:

在信息选项卡的底部可以看到 0.004 秒的运行时间(用红色方框突出显示)。

现在,让我们运行相同的查询,但添加了 WHERE 1=1 子句:

同样,运行时间为 0.004 秒。尽管查询的运行时间可能因许多因素会略有波动,但可以肯定地说 WHERE 1=1 子句对其没有任何影响。

那么,为什么要使用它呢?简单来说,就是...

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

为方便而设

事实上,WHERE 1=1 子句只是一些开发人员采用的一种惯性做法,以简化静态和动态形式的 SQL 语句的使用。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

在静态 SQL 中

向已经具有 WHERE 1=1 的查询添加条件时,此后的所有条件都将包含 AND,因此在注释掉试验查询的条件时更容易。

这类似于另一种在列名之前而不是之后加入逗号的技巧。同样,更容易注释:

在动态 SQL 中

这也是以编程方式构建 SQL 查询时的常见做法。从“WHERE 1=1”开始,然后附加其他条件,例如“ and customer.id=:custId”,具体取决于是否提供了客户 ID。这允许开发人员在查询中附加以“and ...”开头的下一个条件。这是一个假设的例子:

stmt  = "SELECT * "
stmt += "FROM TABLE "
stmt += "WHERE 1=1 "
if user chooses option a then stmt += "and A is not null "
if user chooses option b then stmt += "and B is not null "
if user chooses option b then stmt += "and C is not null "
if user chooses option b then stmt += "and D is not null "

总结

在这篇文章中,我们了解到“WHERE 1=1 的目的是什么?”这个古老问题的答案。它不是一种高级优化技巧,而是一些开发人员所主张的一种风格惯例。



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。

谢谢支持哟 (*^__^*)

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
有一种高级的情商,读懂受益终生。[歪解] the grass is always greener on the other side每天学一句英语台词|​What are you doing here?回国?毕业?搬家?Wherever Global帮您一站式轻松解决!When the Countryside Is the Art工控CTF中常见题型介绍音视频业务挑战与优化实践,MXPlayer在线播放优化,数据分析与播放器优化失眠了,有没有能快速入睡的小技巧?Reverse Alchemy: The Chinese Emperor Who Turned Silver Into Tin过年聚会,退了4个群拉黑了5个人【Career Forum|4.1】Fight the Career Winter in the Tech Industry!上帝要你殁,先要让你“阔”行于所当行,止于不可不止10 个优化技巧,减少 Docker 镜像大小渡十娘|怎么看懂《瞬息全宇宙》(《Everything Everywhere All At Once》)交互设计中常见的7个误区,你中了几个?[干货] 口语中常见的英文小短句,必背【品牌专场】抖音背后的视频体验分析体系与优化技术揭秘‘The Phantom of the Opera’ is Here — in Chinese​一日慢丨过好今天,是一种高级的能力《西游记》隐藏的职场艺术,观音招猴的特殊技巧?印度工人在日猛増Linux 内核中常用的 C 语言技巧美国留学申请过程中常见错误大盘点!美国留学签证如何申请?留学干货!美国留学申请过程中常见错误大盘点!复旦教授最后一课:智慧是一种痛苦,道义是一种责任RocketMQ源码中,7种导致重复消费的坑!79岁李谷一终于摘掉假发,自然老去高级优雅!和丈夫女儿全家福首次曝光靠谱,不是一种才华,而是一种人品为什么 MyBatis 源码中,没有我那种 if···elseJoin free, user-led events — wherever you are生娃,是一种高级娱乐?超详细!Costco家中常备非处方药常见药清单!附常年回购必备榜单旅游記憶(2)英国新生 | 英国租房常见问题与私人公寓租赁流程详解,Reference Check很重!
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。