我们有一个流程可以看到一些一致的查询内并行性解决方案,涉及以下AD-HOC。我找到了几个可用的工作:
UPDATE VPG
SET VPG.CountActual = COALESCE(PGI.CNT, 0)
FROM ValidProductGroups AS VPG
LEFT JOIN
(SELECT ProductGroupID, COUNT(ProductGroupID) AS 'CNT'
FROM ProdGroupItems WITH(NOLOCK)
WHERE Deleted = 0
GROUP BY ProductGroupID) AS PGI ON PGI.ProductGroupID = VPG.ProductGroupID
WHERE VPG.LocationID = 5
我将非聚集索引添加到Update
语句中的子查询中。下一步将MAXDOP
查询提示添加到AD-HOC,但我对可以在更新语句中添加的位置感到困惑:
Update
声明SELECT
语句的结尾?请帮助!
答案 0 :(得分:0)
子查询或CTE中不允许查询提示。您希望在UPDATE语句的末尾使用查询提示。
UPDATE VPG
SET VPG.CountActual = COALESCE(PGI.CNT, 0)
FROM ValidProductGroups AS VPG
LEFT JOIN
(SELECT ProductGroupID, COUNT(ProductGroupID) AS 'CNT'
FROM ProdGroupItems WITH(NOLOCK)
WHERE Deleted = 0
GROUP BY ProductGroupID) AS PGI ON PGI.ProductGroupID = VPG.ProductGroupID
WHERE VPG.LocationID = 5
OPTION (MAXDOP 1)
更多建议: 您需要一种多管齐下的方法来消除(或减少)查询内死锁。在进入查询提示之前,我建议您优化索引策略。
我建议您创建一个更合适的索引来支持此查询,而不是它当前所依赖的IX_ProdGroupItems_ProductGroupID_ExtHierarchyID_ExtNodeID_1
索引。
*wink* *wink*
希望这有帮助,
_UB