我是 ac# 开发人员,但是我对 SQL 很有经验。我在优化查询方面有一些经验,但我遇到了一个让我难倒的经验。
查询大约需要 3 分钟才能运行大约 20,000 行。行立即开始流式传输,但在 3 分钟内,SQL 服务器 cpu 固定在 100%。
在这种特殊情况下,我的查询执行得很好,直到客户要求我用 20k 行测试它们。这 20k 行(客户)分布在 20 个从业者中(所以每个人大约 1000 个)
这是我的相关表的数据库架构:

该查询使用递归 CTE 来收集给定源从业者的(n 级)客户端树。然后它连接到一些 FK 类型的表以收集额外的信息。
看起来放缓来自加入权限表,权限表代表哪些从业者管理哪些客户端。
pooling.ClientAccountInheritedRateGroup,pooling.ClientAccountFirstContact并且pooling.PractitionerAccountFirstContact是所有视图,所有视图都以亚秒选择返回完整数据集。
是的,现在进行实际查询(对不起,它有点像怪物):
with h (distance, id, name, parentid, [path]) as (
select
0,
pa.id,
pa.name,
null,
convert(varchar(80), ltrim(str(pa.id))) as node_seq
from
pooling.practitioneraccount pa
left outer join pooling.practitioneraccountrelation as par
on pa.id = par.childid
where
pa.id = @PractitionerAccountId
or (@PractitionerAccountId is null and …Run Code Online (Sandbox Code Playgroud)