C# 为什么选择比Set语句快

C# 为什么选择比Set语句快,c#,.net,sql,sql-server,C#,.net,Sql,Sql Server,我做了两个基本测试 1- Create Procedure [dbo].[SetLoop] As Begin declare @counter int = 0 ,@a int,@b int,@c int,@d int,@e int While @counter < 1000000 Begin set @a=1 set @b=2 set @c=3 set @d=4 set @e=5

我做了两个基本测试

1-

Create Procedure [dbo].[SetLoop]
As Begin 
declare @counter int = 0 ,@a int,@b int,@c int,@d int,@e int
    While @counter < 1000000
    Begin
        set @a=1
        set @b=2
        set @c=3
        set @d=4
        set @e=5
        set @counter = @counter + 1
    End
End
    While @counter < 1000000
    Begin
        select @a=1
        select @b=2
        select @c=3
        select @d=4
        select @e=5
        select @counter = @counter + 1
    End

而@counter<1000000
开始
设置@a=1
设置@b=2
设置为@c=3
设置@d=4
设置@e=5
设置@counter=@counter+1
终点

结果

setAverage : 2418.44 selectAverage : 1037.52 setAverage : 2513.8 selectAverage : 1025.98 setAverage : 2496.52 selectAverage : 996.36 setAverage : 2518.58 selectAverage : 2504.44 setAverage : 2474.5 selectAverage : 2529.48 setAverage : 2511.22 selectAverage : 2514.04 平均值:2518.58 selectAverage:2504.44 平均值:2474.5 selectAverage:2529.48 平均值:2511.22 selectAverage:2514.04 结果意味着它们是相同的

这意味着,如果您需要设置一个变量,您将来更愿意使用
Select
cuz,如果 如果要设置另一个,只需
,将添加@w=3
,但 如果要设置多个变量,则需要使用
选择

它更容易编写,执行速度更快

但是我想知道为什么在第一次测试中
Select
Set
快?

不是(至少在当前的示例中是这样),循环的每个迭代都要运行6个Set语句和一个Select语句,因此,我希望Select会更快

我建议大家一个一个地比较

CREATE Procedure [dbo].[SelectLoop]
As Begin 
declare @counter int = 0
    While @counter < 1000000
    Begin
        select @counter = @counter + 1
    End
End

CREATE Procedure [dbo].[SetLoop]
As Begin 
declare @counter int = 0
    While @counter < 1000000
    Begin
       set @counter = @counter + 1
    End
End
创建过程[dbo]。[SelectLoop]
作为开始
声明@counter int=0
而@counter<1000000
开始
选择@counter=@counter+1
终点
终点
创建过程[dbo].[SetLoop]
作为开始
声明@counter int=0
而@counter<1000000
开始
设置@counter=@counter+1
终点
终点

这将更准确地指示是否存在差异。

我建议运行类似的测试,但仅针对一个变量,这样循环中只有一个
select
和一个
set
语句。好的,我会这样做并更新问题您仍在执行两个set操作,与单一选择相比。
    While @counter < 1000000
    Begin
        set @a=1
        set @b=2
        set @c=3
        set @d=4
        set @e=5
        set @counter = @counter + 1
    End
setAverage : 2518.58 selectAverage : 2504.44 setAverage : 2474.5 selectAverage : 2529.48 setAverage : 2511.22 selectAverage : 2514.04
CREATE Procedure [dbo].[SelectLoop]
As Begin 
declare @counter int = 0
    While @counter < 1000000
    Begin
        select @counter = @counter + 1
    End
End

CREATE Procedure [dbo].[SetLoop]
As Begin 
declare @counter int = 0
    While @counter < 1000000
    Begin
       set @counter = @counter + 1
    End
End