我已经看到在 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 时优化器无法启动?也许当与删除混合。