带有OR条件的SQL IF EXISTS

时间:2015-03-26 14:58:51

标签: sql sql-server tsql sql-server-2012

我遇到了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语句导致问题。

有人对此有任何想法吗?

1 个答案:

答案 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
相关问题