我在客户端数据的ETL期间遇到问题,其中SQL在我的开发服务器上占用了100%的CPU。这种情况偶尔发生,我发现SP的特定部分导致它,但不确定为什么它会使用这么多的CPU。
LoadId和ClientId都是SP的输入变量。基本上,我试图找出Staging表中的任何对象ID(新加载的数据)是否与现有对象(对于特定客户端)匹配,并且还检查Validation表(数据在处理之前获得验证检查) )任何错误。
SELECT src.Id ,
o.Id ,
CASE WHEN o.Id IS NULL THEN 0
ELSE 1
END
FROM ObjectsStaging src
LEFT OUTER JOIN client.Objects o ON src.Id = o.UniqueId
WHERE src.LoadId = 22
AND ( o.ClientId IS NULL
OR o.ClientId = 3
)
AND NOT EXISTS ( SELECT 1
FROM dbo.ValidationLog v
WHERE v.LoadId = 22
AND v.RowId = src.RowId )
答案 0 :(得分:0)
也许试试这个但是将v.PK更改为V表中的Non nullible列。
SELECT src.Id ,
o.Id ,
CASE WHEN o.Id IS NULL THEN 0
ELSE 1
END
FROM ObjectsStaging src
LEFT OUTER JOIN client.Objects o ON src.Id = o.UniqueId
LEFT OUTER JOIN dbo.ValidationLog v on v.LoadId = 22 AND v.RowId = src.RowId
WHERE src.LoadId = 22
AND ( o.ClientId IS NULL
OR o.ClientId = 3
)
AND v.PK is null -- V.loadid is null ? --(same as not exists)