由于 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
我有一个创建感兴趣人群的@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