【发布时间】: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