小编agr*_*ath的帖子

复杂查询的优化——100% 成本索引查找?

我是 ac# 开发人员,但是我对 SQL 很有经验。我在优化查询方面有一些经验,但我遇到了一个让我难倒的经验。

查询大约需要 3 分钟才能运行大约 20,000 行。行立即开始流式传输,但在 3 分钟内,SQL 服务器 cpu 固定在 100%。

在这种特殊情况下,我的查询执行得很好,直到客户要求我用 20k 行测试它们。这 20k 行(客户)分布在 20 个从业者中(所以每个人大约 1000 个)

这是我的相关表的数据库架构:

在此处输入图片说明

该查询使用递归 CTE 来收集给定源从业者的(n 级)客户端树。然后它连接到一些 FK 类型的表以收集额外的信息。

看起来放缓来自加入权限表,权限表代表哪些从业者管理哪些客户端。

在此处输入图片说明

pooling.ClientAccountInheritedRateGrouppooling.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)

performance sql-server-2008 sql-server query-performance

6
推荐指数
1
解决办法
3927
查看次数