程序建议

时间:2015-04-14 20:25:25

标签: 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逻辑移动到WHERE子句中以创建标准化而不是在其中具有条件的逻辑吗?

E.g。

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

我很欣赏这可能是一个意见,但我很想知道是否有其他人有过这种情况的经验。

1 个答案:

答案 0 :(得分:0)

第二个示例可能会引导您 parameter sniffing problem。 (longer explanation here

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

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