我已经看到在t-sql的正常表上删除性能调整。提高表变量删除的性能
但是有没有性能调整删除表变量要做?
编辑
下面是一个例子: 情节变得更厚,因为UserExclusionsEvaluate实际上是一个CTE,但我要去尝试,并首先优化它周围的表变量(如果可能)。 CTE本身运行速度非常快。只是删除很慢。
DELETE FROM @UsersCriteria
FROM @UsersCriteria UsersCriteria
WHERE UserId IN (SELECT UserID FROM UserExclusionsEvaluate WHERE PushRuleExclusionMet = 1)
在它的当前化身,@UsersCriteria是:
DECLARE @UsersCriteria TABLE
(
UserId int primary key,
PushRuleUserCriteriaType int
)
我试过@UsersCriteria非主,并与聚集非聚集试验。
这很可能也是问题与IN。我也尝试了一个子查询JOIN。
编辑:
好消息! 经过大量的与SQL播放,包括suquery移动到链CTE,试图表提示等等等等等等
从表变量临时表的简单变化显着改善的性能。
这真的很有趣,由于删除自行运行良好,子查询(在CTE上)自行运行良好。但混合这两个运行缓慢。
我猜测,在子查询中使用CTE时,优化器无法启动?也许当与删除混合。
你有PushRuleExclusionMet索引(假设用户ID是集群) – gbn
嗨@gbn谢谢你为我调查这个。 PushRuleExclusionMet在CTE中? CTE中的列可以被索引吗? –
对不起,错过了那个位 – gbn