我遇到了SQL语句的性能问题。我注意到在一个过程中的一个SQL语句中性能下降。
SQL声明:
IF EXISTS(SELECT TOP 1 FROM TABLE1 WHERE COLUMN1 = 'XYZ') OR @ISALLOWED = 1
BEGIN
-- SQL Statements
END
我无法理解为什么带有IF Exists语句的OR语句导致上述查询中出现性能问题。因为如果我重写上面这样的陈述:
DECLARE @ISVALUEEXISTS BIT
SET @ISVALUEEXISTS = 0
IF EXISTS(SELECT TOP 1 FROM TABLE1 WHERE COLUMN1 = 'XYZ')
SET @ISVALUEEXISTS = 1
IF (@ISVALUEEXISTS = 1 OR @ISALLOWED = 1 )
BEGIN
--SQL Statements
END
然后性能问题就消失了。所以,我无法理解如何以及为什么OR条件与IF Exists语句导致问题。
有人对此有任何想法吗?
答案 0 :(得分:4)
如果您在存储过程中有此查询,则可能因parameter sniffing而发生此事。
尝试这样的方法来检查它:
declare @ISALLOWED_internal
select @ISALLOWED_internal = @ISALLOWED
IF EXISTS(SELECT TOP 1 FROM TABLE1 WHERE COLUMN1 = 'XYZ') OR @ISALLOWED_internal = 1
BEGIN
-- SQL Statements
END