Sql server 2012 程序建议

Sql server 2012 程序建议,sql-server-2012,sql-server-2014,query-performance,Sql Server 2012,Sql Server 2014,Query Performance,我希望在生产数据库中提高我们的一个流程的性能。我们有两组SP,它们是按配置设置存储在配置表中的 示例语法为: Declare @SWITCH BIT IF @SWITCH = 1 INSERT INTO DEST_TABLE_A SELECT VALUES FROM SOURCE_TABLE IF @SWITCH = 2 INSERT INTO DEST_TABLE_B SELECT VALUES FROM SOURCE_TABLE 在这种情况下,更好的做法是将IF逻辑移到WHE

我希望在生产数据库中提高我们的一个流程的性能。我们有两组SP,它们是按配置设置存储在配置表中的

示例语法为:

Declare @SWITCH BIT

IF @SWITCH = 1
INSERT INTO DEST_TABLE_A 
SELECT VALUES
  FROM SOURCE_TABLE

IF @SWITCH = 2
INSERT INTO DEST_TABLE_B
SELECT VALUES
  FROM SOURCE_TABLE
在这种情况下,更好的做法是将IF逻辑移到WHERE子句中,以创建一个标准化的,而不是在其中包含条件的逻辑吗

例如


我很感激这可能是一篇观点文章,但我很好奇是否有其他人有过这种情况的经验。

第二个例子可能会让你想到。()

此问题由查询优化器创建,该优化器生成针对switch语句的一个值优化的执行计划(这是您在调用存储过程时第一次发送的值)

在您的情况下,如果第一次调用@switch=1的存储过程,将生成此参数的执行计划。使用@switch=2的后续调用可能需要更长的时间来处理。

IMO,IF语句(我会将其写成IF/ELSE)会更好,因为这样只会进行1
INSERT-INTO
调用,而您的第二个示例将执行2
INSERT-INTO
调用,即使没有插入任何内容。对于我来说,像第二个例子那样写出来也没有意义,因为
@SWITCH
一次只能设置为1个值,所以实际上只会使用一个insert语句。
INSERT INTO DEST_TABLE_A
SELECT VALUES 
FROM SOURCE_TABLE
WHERE @SWITCH = 1

INSERT INTO DEST_TABLE_B
SELECT VALUES
FROM SOURCE_TABLE
WHERE @SWITCH = 2