2016-02-10 44 views
1

我有一個查詢可以創建一個感興趣的總體的@TABLE。它的結構是這樣的:查詢由於WHERE子句的結構而減慢速度

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到這個表。我的問題是,爲什麼我的成績下降這麼多,當我改變從這個表的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鍵。

謝謝

+0

什麼指標上c_Wellsoft_Rpt_tbl存在嗎? –

+0

負面,沒有。 –

+0

優化器不保留表變量的統計信息,這可能會產生影響。根據您有多少行,臨時表可能會更快。 – andreamc

回答

1

我懷疑,這個問題是因爲表變量不會對帳戶的索引。如果你在帳戶上添加索引,那麼我會期望更好的性能。

看到這個問題的答案對如何添加一個索引細節:Creating an index on a table variable