为什么那些嵌套子查询的过滤范围之间没有任何区别

Why isn't there any difference between filter scope on those nested subqueries

鉴于下面的两个子查询,我今天被告知 query (1) 效率低下,因为它 会获取所有数据 在过滤它们之前从视图中获取,因为 where 子句在 外部 嵌套查询。

(1) 来自 ORM (在外面)

select * from (select * from VW_LOURD) as q  where q.Expr5 = 'SYNC_FLAG'

(2) from self (where inside)

select * from (select * from VW_LOURD where Expr5 = 'SYNC_FLAG') as q 

我重写了 (2) 中所示的查询,以便在子查询 中包含 过滤器。我没有发现任何明显的性能差异。为确保我比较了 执行计划 并且它们 完全相同 .

我得出的结论是,无论过滤器是在子查询内部还是外部,两个查询都将以相同的方式获取相似数量的数据,但是,我不确定我的结论是否 100% 正确,而且我无法解释为什么两个查询相似

这两个查询在功能上是相同的,这意味着它们将始终产生相同的结果。

我了解到您的意图是将过滤器推送到子查询以提高效率。你的数据库无论如何都知道得更多——事实上,它很可能将这两个查询重写为:

select * from vw_lourd where expr5 = 'SYNC_FLAG'

...这就是它们的真实面目。因此,两个执行计划是相同的。