MS SQL中包含条件的错误计划

MS SQL中包含条件的错误计划,sql,sql-server,tsql,sql-server-2008-r2,sql-execution-plan,Sql,Sql Server,Tsql,Sql Server 2008 R2,Sql Execution Plan,Sql server 2008 R2 我有两个问题 DECLARE @title NVARCHAR(500) = '"Finite" AND "Elements"' select * from papers p where (@title = '""' OR CONTAINS(p.name, @title)) select * from papers p where (CONTAINS(p.name, @title)) 第一个工作大约7秒,第二个工作几毫秒。为什么 问题出在@title='

Sql server 2008 R2

我有两个问题

DECLARE @title NVARCHAR(500) = '"Finite" AND "Elements"'

select * from papers p
where (@title = '""' OR CONTAINS(p.name, @title))

select * from papers p
where (CONTAINS(p.name, @title))
第一个工作大约7秒,第二个工作几毫秒。为什么

问题出在
@title='''或…

在编译时,它不知道
@title
实际上是否包含值
,因此需要返回所有行

您可以尝试将
选项(重新编译)
添加到查询中,以便在分配变量后重新编译,或者将其拆分为两种情况

IF @title = '""'
  SELECT *
  FROM   papers
ELSE
  SELECT *
  FROM   papers p
  WHERE  ( CONTAINS(p.name, @title) )  

请出示这两个项目的计划。