查询1 - 用户ID是主标识符,非聚集的索引
update myTable set
CurrentHp=MaximumHp,
SelectedAttack1RemainingPP=SelectedAttack1MaximumPP,
SelectedAttack2RemainingPP=SelectedAttack2MaximumPP,
SelectedAttack3RemainingPP=SelectedAttack3MaximumPP,
SelectedAttack4RemainingPP=SelectedAttack4MaximumPP where UserId=1001695
查询2
update myTable set
CurrentHp=MaximumHp,
SelectedAttack1RemainingPP=SelectedAttack1MaximumPP,
SelectedAttack2RemainingPP=SelectedAttack2MaximumPP,
SelectedAttack3RemainingPP=SelectedAttack3MaximumPP,
SelectedAttack4RemainingPP=SelectedAttack4MaximumPP
where UserId=1001695
and
(
SelectedAttack1RemainingPP!=SelectedAttack1MaximumPP
or
SelectedAttack2RemainingPP!=SelectedAttack2MaximumPP
or
SelectedAttack3RemainingPP!=SelectedAttack3MaximumPP
or
SelectedAttack4RemainingPP!=SelectedAttack4MaximumPP
or
CurrentHp!=MaximumHp
)
当我通过SQL Server Management Studio中检查和比较“包括实际的执行计划”,其成本是相同的
然而,当我检查通过包括客户端统计,我看到第一个查询显示更新1900行,而第二个显示0行更新
所以在这里我的问题,当列A和B的值相等,做SQL仍然在进行更新?
我也逻辑思维,这两个查询应该是相同的,但我想听听你的意见
执行计划相同的性能,图像
客户端统计信息查询1
客户端统计信息查询2
两个执行计划是一样的,因为你的第一个过滤条件(用户ID = 1001695)只选择一个行和表上这方面的指标。如果你改变你的查询的范围条件,例如(用户ID> 100),在执行计划的成本,改变,他们是不一样的,或者如果你的过滤器是在另一个领域该表上没有它的索引,的结构执行计划改变,他们是不一样的。