我正在尝试优化一些SQL函数,并想知道是否可以在性能更高的查询中启用它。
DECLARE @SPAN INT;
SET @SPAN = 1;
BEGIN TRANSACTION;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
UPDATE UserSession
SET PauseSpan = PauseSpan + @SPAN,
PauseSpanTotal = PauseSpanTotal + @SPAN
WHERE State & 8 = 8;
UPDATE UserSession
SET Span = Span + @SPAN
WHERE State & 1 = 1;
UPDATE UserSession
SET PendSpan = PendSpan + @SPAN,
PendSpanTotal = PendSpan + @SPAN
WHERE State & 4 = 4 ;
SELECT
UserSessionId AS Id, UserId, HostId, State, Span,
BilledSpan, PendTime, PendSpan, EndTime, CreatedById, CreatedTime,
Slot, PendSpanTotal, PauseSpan, PauseSpanTotal
FROM
UserSession
WHERE
State & 1 =1;
COMMIT;
该函数具有一个INT跨度值,而我试图做的是根据当前实体状态更新一组不同的属性。
该函数几乎每秒被调用一次,需要更新的记录可能介于一到数千条之间,因此,由于我处于可序列化锁定之下,因此我希望使其性能尽可能提高。
还在查询的最后,我根据参数执行SELECT
,问题是是否可以仅返回已修改的记录,并且性能更高?
有什么建议吗?