在尝试优化使用MERGE的存储过程时,我偶然发现了本文。我应该如何解释大胆的说法,即不包括与常量的比较?
http://technet.microsoft.com/zh-CN/library/cc879317(v=sql.105).aspx
在ON子句中仅指定确定与源表和目标表中的数据匹配的条件的搜索条件。即,仅指定目标表中与源表的相应列进行比较的列。不包括与其他值(例如常数)的比较。
这是否意味着我应该避免使用看起来像这样的ON语句?
ON [Source].[CategoryId] = [Target].[CategoryId] AND [Source].[Color] = @Color
这个建议仅适用于MERGE还是适用于所有JOIN?
参数确定,建议使用。
您应该避免使用ON 1 = 1之类的条件加入
由于减少了查询编译和重新编译的频率,因此可以提高查询性能。查询优化器不会将简单的参数化过程应用于MERGE语句。因此,包含字面值的MERGE语句的性能可能不如单个INSERT,UPDATE或DELETE语句,因为每次执行MERGE语句时都会编译新计划。
在MERGE语句的ON子句和WHEN子句中参数化所有文字值。例如,您可以将MERGE语句合并到存储过程中,并用适当的输入参数替换文字值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句