由于 WHERE 子句的结构,查询变慢

Query Slow down due to structure of WHERE clause

我有一个创建感兴趣人群的@TABLE 的查询。它的结构是这样的:

DECLARE @SepsisTbl TABLE (
    PK INT IDENTITY(1, 1) PRIMARY KEY
    , Name                VARCHAR(500)
    , MRN                 INT
    , Account             INT
    , Age                 INT -- Age at arrival
    , Arrival             DATETIME
    , Triage_StartDT      DATETIME
    , Left_ED_DT          DATETIME
    , Disposition         VARCHAR(500)
    , Mortality           CHAR(1)
);

WITH Patients AS (
    SELECT UPPER(Patient)             AS [Name]
    , MR#
    , Account
    , DATEDIFF(YEAR, AgeDob, Arrival) AS [Age_at_Arrival]
    , Arrival
    , Triage_Start
    , TimeLeftED
    , Disposition
    , CASE
        WHEN Disposition IN (
            'Medical Examiner', 'Morgue'
        )
        THEN 'Y'
        ELSE 'N'
      END                             AS [Mortality]

    FROM SMSDSS.c_Wellsoft_Rpt_tbl
    WHERE Triage_Start IS NOT NULL
    AND (
        Diagnosis LIKE '%SEPSIS%'
        OR
        Diagnosis LIKE '%SEPTIC%'
    )
)

INSERT INTO @SepsisTbl
SELECT * FROM Patients

从现在开始,我还有 5 个相同类型的查询正在寻找不同类型的订单,然后我 LEFT OUTER JOIN 到此 table。我的问题是,当我将 tables 的 where 子句从以下更改时,为什么我的性能会下降这么多:

AND A.Account IN (
    SELECT Account
    FROM SMSDSS.c_Wellsoft_Rpt_tbl
    WHERE (
        Diagnosis LIKE '%SEPSIS%'
        OR
        Diagnosis LIKE '%SEPTIC%'
    )

对此:

AND A.Account IN (
    SELECT Account
    FROM @SepsisTbl
)

运行 时间从 2.5 分钟到 10 多分钟,仍然没有结果。 CTE 本身 运行 和我按 F5 一样快。

谢谢,

我怀疑问题是因为 table 变量在帐户上没有索引。如果您在帐户上添加索引,那么我希望性能会更好。

有关如何添加索引的详细信息,请参阅此问题的答案:Creating an index on a table variable