我希望提高生产数据库中某个流程的性能。我们有两组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
我很欣赏这可能是一个意见,但我很想知道是否有其他人有过这种情况的经验。
答案 0 :(得分:0)
第二个示例可能会引导您 parameter sniffing problem。 (longer explanation here)
此问题由查询优化程序创建,该查询优化程序生成针对switch语句的某个值优化的执行计划(这是您在调用存储过程时第一次发送的值)。
在您的情况下,如果第一次使用@switch = 1调用存储过程,则会生成此参数的执行计划。使用@switch = 2的后续调用可能需要花费更长的时间来处理。