SQL 具有相同多个子查询的语句 运行 非常慢
SQL Statement with the same multiple subqueries running very slow
我希望这里有人能帮助我。我收到的查询需要很长时间才能 运行 (超过 30 分钟)。我一直在尝试重写查询,但到目前为止没有运气。我发布了一个查询示例,以便您了解我正在尝试做什么。
表 1 有 2000 条记录。
Table2 有 2000000 条记录。
Table2 可能不包含它正在尝试查找的记录。因此不能使用 CROSS APPLY 或 INNER JOIN。我认为这可以通过 LEFT JOIN 来解决,但我一直无法找到重写它的方法。
SELECT
ID, A, B,
CASE WHEN c IS NULL then
(SELECT max(distinct c) FROM TABLE2 tbl2 WHERE tbl1.Id = tbl2.Id)
ELSE
C
END as C,
CASE WHEN d IS NULL then
(SELECT max(distinct d) FROM TABLE2 tbl2 WHERE tbl1.Id = tbl2.Id)
ELSE
D
END as D,
CASE WHEN e IS NULL then
(SELECT max(distinct e) FROM TABLE2 tbl2 WHERE tbl1.Id = tbl2.Id)
ELSE
e
END as e,
f, g, h, i
FROM TABLE1 tbl1
而不是 运行 使 'select max' 查询 3 次,有没有办法只加入 table 一次,这样“相同”的查询就不会 运行 3次? Max的原因是Table2可能包含几条Id相同的记录。在这种情况下,将 Id 视为具有多个订单行号的 Order_Id。
希望它有意义。
您的查询似乎应该归结为以下内容,这对您有用并且表现更好吗?
select
t1.ID, t1.A, t1.B,
IsNull(t1.c, t2.c) C,
IsNull(t1.d, t2.d) D,
IsNull(t1.e, t2.e) E,
t1.f, t1.g, t1.h, t1.i
from TABLE1 t1
outer apply (
select Max(c) c, Max(d) d, Max(e) e
from TABLE2 t2
where t2.Id = t1.Id
)t2
我希望这里有人能帮助我。我收到的查询需要很长时间才能 运行 (超过 30 分钟)。我一直在尝试重写查询,但到目前为止没有运气。我发布了一个查询示例,以便您了解我正在尝试做什么。
表 1 有 2000 条记录。 Table2 有 2000000 条记录。
Table2 可能不包含它正在尝试查找的记录。因此不能使用 CROSS APPLY 或 INNER JOIN。我认为这可以通过 LEFT JOIN 来解决,但我一直无法找到重写它的方法。
SELECT
ID, A, B,
CASE WHEN c IS NULL then
(SELECT max(distinct c) FROM TABLE2 tbl2 WHERE tbl1.Id = tbl2.Id)
ELSE
C
END as C,
CASE WHEN d IS NULL then
(SELECT max(distinct d) FROM TABLE2 tbl2 WHERE tbl1.Id = tbl2.Id)
ELSE
D
END as D,
CASE WHEN e IS NULL then
(SELECT max(distinct e) FROM TABLE2 tbl2 WHERE tbl1.Id = tbl2.Id)
ELSE
e
END as e,
f, g, h, i
FROM TABLE1 tbl1
而不是 运行 使 'select max' 查询 3 次,有没有办法只加入 table 一次,这样“相同”的查询就不会 运行 3次? Max的原因是Table2可能包含几条Id相同的记录。在这种情况下,将 Id 视为具有多个订单行号的 Order_Id。 希望它有意义。
您的查询似乎应该归结为以下内容,这对您有用并且表现更好吗?
select
t1.ID, t1.A, t1.B,
IsNull(t1.c, t2.c) C,
IsNull(t1.d, t2.d) D,
IsNull(t1.e, t2.e) E,
t1.f, t1.g, t1.h, t1.i
from TABLE1 t1
outer apply (
select Max(c) c, Max(d) d, Max(e) e
from TABLE2 t2
where t2.Id = t1.Id
)t2