【问题标题】:Wrong Plan for CONTAINS condition in the MS SQLMS SQL 中包含条件的错误计划
【发布时间】:2012-02-14 21:57:13
【问题描述】:

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 秒,第二次工作几毫秒。为什么????

【问题讨论】:

  • 请出示两者的计划。

标签: sql sql-server tsql sql-server-2008-r2 sql-execution-plan


【解决方案1】:

@title = '""' OR ... 位是问题所在。

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

您可以尝试将OPTION(RECOMPILE) 添加到查询中,以便在分配变量后重新编译它,或者将其分成两种情况。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多