관심 인구의 @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
이 시점부터 저는 LEFT OUTER JOIN
이 테이블 에 다른 유형의 주문을 찾는 동일한 종류의 쿼리를 5 개 더 추가했습니다 . 내 질문은 테이블의 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를 누를 수있는 한 빨리 실행됩니다.
감사합니다,
문제는 테이블 변수에 계정 인덱스가 없기 때문이라고 생각합니다. 계정에 색인을 추가하면 더 나은 성능을 기대할 수 있습니다.
인덱스를 추가하는 방법에 대한 자세한 내용은이 질문에 대한 답변을 참조하십시오. 테이블 변수에 인덱스 생성
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다