美文网首页Java
源码中常见的 where 1=1 是一种高级优化技巧?

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

作者: 喝杯Java润润BUG | 来源:发表于2023-03-22 10:18 被阅读0次

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

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

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

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

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

image.png

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

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

image.png

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

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

为方便而设

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

在静态 SQL 中

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

image.png

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

image.png

在动态 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 的目的是什么?”这个古老问题的答案。它不是一种高级优化技巧,而是一些开发人员所主张的一种风格惯例。

相关文章

  • 数据库

    mysql: 优化方法: 1,sql语句的优化: 在where中尽量避免使用!= 在where中对null...

  • 1.1 ListView使用技巧

    Android高级进阶学习笔记》第1个知识点:ListView使用技巧 目录 1、ListView常用优化技巧 1...

  • sql语句查询,多字段like模糊查询优化

    1、多字段like模糊查询优化:最常见的写法:where a like '%xx%' or b like '%x...

  • 数据库

    1. 常见的数据库优化手段: a. 百万级数据库优化: 对查询进行优化,要尽量避免全表扫描,考虑在where及...

  • 数据库

    1、常见的数据库优化手段 对查询进行优化,要尽量避免全表扫描,考虑在where及order by涉及的列上建立索引...

  • iOS开发中常见的性能优化技巧

    iOS开发中常见的性能优化技巧 iOS开发中常见的性能优化技巧

  • SEO高级优化技巧

    SEO高级优化技巧 基础优化更多的是关于技术方面的...

  • sql中的`where 1 = 1`与 `where 1 = 0

    where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句。一、不用whe...

  • PHP数组源码解析与GDB实战分析

    一、源码 一、PHP数组源码初步分析1、基本类型定义(php7.3.9) 2、常见宏 3、几个GDB技巧 4、Ha...

  • mysql sql优化

    1. 针对where,group by,order by子句优化 优化group by语句默认情况下,MySQL对...

网友评论

    本文标题:源码中常见的 where 1=1 是一种高级优化技巧?

    本文链接:https://www.haomeiwen.com/subject/kxivrdtx.html