【问题标题】:Will this 'Where' condition speed up SQL query这个“Where”条件会加速 SQL 查询吗
【发布时间】:2020-11-26 23:28:58
【问题描述】:

我将进行一个复杂的(对我而言)SQL 查询,该查询涉及查找与采购订单行相关联的发票价值和收货价值的总和(因此这是 3 个连接表,可能还有更多)以及各种日期过滤器等等。
在许多情况下,订单行将达到我知道我再也不必担心它们的状态。因此,我可以在我的采购订单行表中添加一个逻辑字段来显示这一点,在我继续进行时勾选相关行,并在 SQL 中添加一个where 条件以使其忽略它们。

我想知道的是,那个 Where 条件会在 Select 之前还是之后执行?因为如果它正在执行所有计算然后只是过滤输出,我不想要它,因为它只是更多的时间/处理。但是,如果 Where 子句过滤输入(即在它进行任何计算之前),那么它可能会非常节省时间。

我知道您可以直接说“试试看”,但无论我添加该逻辑字段是否会对其他流程和报告产生影响,因此我希望在不花费太多时间构建测试的情况下对其进行计划。

那么,TL;DR:在 SQL 中,Where 是在 Select 之前执行的吗? 或者换句话说,Where 是否过滤查询的输入或输出?

希望这是有道理的,我在这里还是有点初学者!

【问题讨论】:

  • 没有查询、数据库、样本数据和期望的结果,几乎没有信息可以用来制定答案。
  • 逻辑上,WHERE 子句过滤 FROM 子句结果。在实践中,谁知道 - 相信 dbms 优化器。

标签: sql where-clause


【解决方案1】:

查看Order of execution,它表明WHERE 子句在第2 步进行评估,而SELECT 是第5 步。

因此WHERE 过滤(并因此减少)将由SELECT 处理的行数。

我不完全确定这是否适用于所有常规的基于 SQL 的数据库引擎 - 该站点似乎并没有将自身限制为单个 RDBMS - 因此任何关系数据库系统都有可能对此进行相同处理

【讨论】:

    猜你喜欢
    • 2013-06-22
    • 2012-03-25
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    相关资源
    最近更新 更多