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