是否有这两个查询之间的性能差异?

问题描述 投票:0回答:1

查询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仍然在进行更新?

我也逻辑思维,这两个查询应该是相同的,但我想听听你的意见

执行计划相同的性能,图像

enter image description here

客户端统计信息查询1

enter image description here

客户端统计信息查询2

enter image description here

sql-server tsql sql-server-2017 sqlperformance
1个回答
0
投票

两个执行计划是一样的,因为你的第一个过滤条件(用户ID = 1001695)只选择一个行和表上这方面的指标。如果你改变你的查询的范围条件,例如(用户ID> 100),在执行计划的成本,改变,他们是不一样的,或者如果你的过滤器是在另一个领域该表上没有它的索引,的结构执行计划改变,他们是不一样的。

© www.soinside.com 2019 - 2024. All rights reserved.