【问题标题】:Faster Join on Sub-query更快地加入子查询
【发布时间】:2016-10-28 19:27:11
【问题描述】:

我正在尝试对我需要的报告进行单个查询,但我不确定如何解决速度问题。

预期结果
我需要为每位患者提供一行,在同一列中列出他们的所有诊断代码。我的代码确实有效并完成了工作,但它增加了我的运行次数,在不同的标准下必须完成 30 次,并且将使 5 分钟的过程大约需要 30 次。

尝试解决
我正在使用以下代码进行左外连接。

left outer join (Select distinct add2.VisitID, 
substring((Select ', '+add1.Diagnosis  AS [text()]  
From AbsDrgDiagnoses add1 Where add1.VisitID = add2.VisitID 
ORDER BY add1.VisitID,DiagnosisSeqID For XML PATH ('')), 2, 1000) DiagText
From [Livendb].[dbo].[AbsDrgDiagnoses] add2) add3 on diag.VisitID = add3.VisitID  

结果
这可行,但我对一个月数据的 9 秒查询仅使用 30 个代码中的 1 个过滤器提高到 1m 12s。如果我自己运行查询,编译需要 3m 49s 秒,所以它在我的主表中有所改进,但如果可能的话,我想缩小它。

其他尝试的解决方案
我试图从查询中创建一个视图并使用它,但收到了相同的运行时间。

我还附加了 SourceID,它始终是相同的值,但我的 8 个表在它们的索引中使用了它,但它实际上稍微增加了我的时间。

结论
我需要合并的表包含大约 3000 万行,这很可能是问题所在,并且无法解决增加的时间,但我希望有人可能有一个技巧可以帮助我减少这个时间。

【问题讨论】:

    标签: sql sql-server subquery left-join


    【解决方案1】:

    这是您的子查询:

    (Select distinct add2.VisitID,
           substring((Select ', '+add1.Diagnosis  AS [text()]  
                      From AbsDrgDiagnoses add1
                      Where add1.VisitID = add2.VisitID 
                      order by add1.VisitID,DiagnosisSeqID
                      For XML PATH ('')
                     ), 2, 1000) DiagText
      From [Livendb].[dbo].[AbsDrgDiagnoses] add2
    ) add3
    on diag.VisitID = add3.VisitID 
    

    让我假设当你删除它时,查询很快。

    我认为outer apply 会更好:

    outer apply
        (select stuff((Select ', ' + add1.Diagnosis as [text()]  
                       From AbsDrgDiagnoses add
                       Where diag.VisitID = add.VisitID 
                       order by DiagnosisSeqID
                       For XML PATH ('')
                      ), 1, 2, '') DiagText
        ) add3
    

    我无法想象第二级子查询实际上有助于提高性能。

    而且,说到性能,您可以在AbsDrgDiagnoses(VisitID, DiagnosisSeqID, Diagnosis) 上使用索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-11
      • 2021-12-26
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 2021-12-08
      相关资源
      最近更新 更多