我已經看到在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