2013-04-08 75 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