使用SET或SELECT填充变量是否更好?


8

(关于性能)将值设置为变量的更好方法是什么?

  1. 通过SET命令:

    DECLARE @VarString nvarchar(max);
    SET @VarString = 'john doe';
    SELECT @VarString;
  2. 通过SELECT命令:

    DECLARE @VarString nvarchar(max);
    SELECT @VarString = 'john doe';
    SELECT @VarString;

1
使用SELECT并不是语义上的,但是我很好奇它是否比SET更快。
拉斐尔·卡斯纳


@RafaelKassner- 一次将值分配给多个变量时SELECT速度更快。否则,性能差异可以忽略不计。
Nick Chammas

@SQLLearner-该报告给出了不确定的结果。首先,发帖人说SET速度更快,然后中途他补充说:“奇怪的是,如果您将奔跑次数提高到10,那么SET开始就落后了。”
Nick Chammas

Answers:


8

不要严格选择一个或另一个来提高性能。

根据适合您的风格和开发需求的选择,如结论中建议的之间的出色对比SELECTSET(强调和次要格式添加):

最佳实践建议不要坚持一种方法。根据情况,您可能要同时使用SETSELECT

以下是一些使用场景SET

  • 如果需要直接将单个值分配给变量,并且不涉及查询来获取值
  • 预期为NULL分配(NULL在结果集中返回)
  • 任何计划的迁移都应遵循标准
  • 非标量结果是预期的,需要处理

SELECT在以下几种情况下,使用高效且灵活:

  • 通过直接分配值来填充多个变量
  • 多个变量由单个来源填充(表格,视图)
  • 分配多个变量的编码更少
  • 如果需要获取@@ROWCOUNT@ERROR执行最后一条语句,请使用此选项

3

我认为共识是两者之间的性能差异可以忽略不计(SET速度更快)。但是,如果您像我一样,SET出于可读性考虑,我会在适当的地方使用。下一个将维护您的代码的人将为此表示感谢;-)


1
您可以发布基准测试证明SET更快吗?
AK 2012年

亚历克斯,请看看这个作为一个例子stackoverflow.com/questions/189588/...
MarlonRibunal

马龙,那份报告没有定论。请注意,在海报的中途注意到:“奇怪的是,如果您将运行次数提高到10,则SET开始落后。”
Nick Chammas

这就是为什么我的答案倾向于“可读性目的”的原因。您的答案中的用例场景很重要。
MarlonRibunal 2012年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.