我面临SQL语句的性能问题。我注意到在一个过程中的一个SQL语句中出现了性能下降。
SQL语句:
IF EXISTS(SELECT TOP 1 FROM TABLE1 WHERE COLUMN1 = 'XYZ') OR @ISALLOWED = 1
BEGIN
-- SQL Statements
END我无法理解为什么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条件是如何和为什么会导致问题的。
有人知道这事吗?
发布于 2015-03-26 15:03:22
如果您在存储过程中有此查询,这可能因为参数嗅探而发生。
尝试这样的方法来检查它:
declare @ISALLOWED_internal
select @ISALLOWED_internal = @ISALLOWED
IF EXISTS(SELECT TOP 1 FROM TABLE1 WHERE COLUMN1 = 'XYZ') OR @ISALLOWED_internal = 1
BEGIN
-- SQL Statements
ENDhttps://stackoverflow.com/questions/29281762
复制相似问题