【发布时间】:2020-04-22 16:11:54
【问题描述】:
让我们想象两个代码草稿。
图。 1:
WITH
cte1 AS (
SELECT a1, a2
FROM A
WHERE a_condition
),
cte2 AS (
SELECT b1, b2
FROM B
WHERE b_condition
)
SELECT
a1, a2, b1, b2
FROM
cte1, cte2
WHERE
cross_condtion
图。 2:
WITH
cte_a AS (
SELECT a1, a2
FROM A
),
cte_b AS (
SELECT b1, b2
FROM B
)
SELECT
a1, a2, b1, b2
FROM
cte_a, cte_b
WHERE
a_condition AND
b_condition AND
cross_condtion
此类查询的执行计划是否相同?或者在第二种情况下,系统会从 A 获取所有数据,从 B 获取所有数据,然后才应用过滤器?
【问题讨论】:
-
学习使用正确的、明确的、标准的、可读的
JOIN语法。 -
您为什么要问我们计划是否相同?只需获取执行计划并查看
-
首先,这只是一个说明,而不是实际的代码,为了说明的目的,我敢打赌扔掉不必要的细节是可以的。比如“正确的、显式的、标准的、可读的 JOIN 语法”。我没有被问到“JOIN 语法”。第二。我的真实代码非常复杂和庞大,我遇到了一些性能问题,我正在尝试对它们进行本地化。而真正的执行计划也非常复杂和庞大。
标签: sql sql-server common-table-expression query-performance