2013-04-08 146 views

回答

1

尝试LIKE运算符。在查询

SELECT 
    * 
FROM 
    YourTABLE 
WHERE 
    ColumnName LIKE '%like%' 
0

好吧,为了能继续使用全文索引,避免表扫描,试试这个

select * 
    from yourTable 
    where contains (ColumnName,'like') 
    and (ColumnName not like 'like%' or ColumnName like '_%like%') 

但是,查询优化器可能决定全表扫描更有效。

+0

select * from eg_fulltext其中contains(描述,'“like”')和(描述不像'like%'或描述像'_%like%')---它不起作用 – krishnakishore 2013-04-08 05:58:24

+0

嗯。我测试了它,它在我的机器上工作。第二行过滤掉句子开头只有一个'like'的行,而第一行只包含句子中'like'的行。你能描述一下,什么不起作用? – alzaimar 2013-04-08 06:12:23

+0

好的我正在跟另一个例子 – krishnakishore 2013-04-08 06:20:58

0

检查您的表是否过期的统计信息,尤其是检查统计信息是否与您的全文索引相关。由于使用的是SQL Server 2008中,所以,你可以查询DMV让你的索引统计信息或使用DBCC看到的统计数据详细信息

DBCC SHOW_STATISTICS ("[schema].[table]",indexname); 

检查第一个返回结果,[更新],[行] ,如果统计数据过期或[取样的行数]远远小于[行数],这会导致SQL引擎决定使用表扫描而不是使用索引,[统计数据]会被[采样行数]所限制。

+0

我认为问题是'在字符串/句子中间'这个子句。据我所知,没有办法用简单的全文来查询。 – alzaimar 2013-04-08 06:18:12