i did 2 basic tests
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
create procedure SelectLoop
As Begin 
declare @counter int =0 ,@a int,@b int,@c int,@d int,@e int
    While @counter < 1000000
    Begin
        select @a=1, @b=2, @c=3, @d=4, @e=5,@counter = @counter + 1
    End
End
    var setTimes = new List<double>();
    for (var i = 0; i < 50; i++)
    {
        stopwatch.Start();
        dataContext.SetLoop();
        stopwatch.Stop();
        setTimes.Add(stopwatch.ElapsedMilliseconds);
        stopwatch.Reset();
    }
    var selectTimes = new List<double>();
    for (var i = 0; i < 50; i++)
    {
        stopwatch.Start();
        dataContext.SelectLoop();
        stopwatch.Stop();
        selectTimes.Add(stopwatch.ElapsedMilliseconds);
        stopwatch.Reset();
    }
    var setAverage = setTimes.Sum() / setTimes.Count;
    var selectAverage = selectTimes.Sum()/selectTimes.Count;
Results
setAverage : 2418.44 selectAverage : 1037.52 setAverage : 2513.8 selectAverage : 1025.98 setAverage : 2496.52 selectAverage : 996.36
results mean Select faster than Set by one and half time exactly by 142.78%
2-
    While @counter < 1000000
    Begin
        select @a=1
        select @b=2
        select @c=3
        select @d=4
        select @e=5
        select @counter = @counter + 1
    End
    While @counter < 1000000
    Begin
        set @a=1
        set @b=2
        set @c=3
        set @d=4
        set @e=5
        set @counter = @counter + 1
    End
Results
setAverage : 2518.58 selectAverage : 2504.44 setAverage : 2474.5 selectAverage : 2529.48 setAverage : 2511.22 selectAverage : 2514.04
results means they are the same
that's mean if you need to set one variable prefer to use Select cuz in the future if 
you want to set another one just ,@w=3 will be added but 
if you want to set more than one variable defiantly you need to use Select 
it's easier to write, faster to be executed  
But I was wondering why Select Faster than Set in the first test?
It's not (at least in the example you currently have), you are running 6 SET statements and a single SELECT statement for each iteration of the loop, therefore, I would expect the SELECT to be faster.
I would suggest comparing like for like;
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
This will give a more accurate indication as to whether there are differences.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With