SQL查询源码中常见的 where 1=1 是一种高级优化技巧?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
你是否曾在 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 子句对其没有任何影响。
◆ 为方便而设事实上,where 1=1 子句只是一些开发人员采用的一种惯性做法,以简化静态和动态形式的 SQL 语句的使用。 ◆ 在静态 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 的目的是什么?”这个古老问题的答案。它不是一种高级优化技巧,而是一些开发人员所主张的一种风格惯例。 该文章在 2023/8/25 10:50:19 编辑过 |
关键字查询
相关文章
正在查询... |