2011-07-14 28 views
6

我決定更改使用LIKE '%' + @searchTerm + '%'的搜索來使用FULLTEXT索引。我使用的是SQL Server 2005中在SQL Server中使用全文搜索的延遲

我創建了一個目錄,比如:

CREATE FULLTEXT CATALOG CatalogName AS DEFAULT 

我已經創建了索引,就像這樣:

CREATE FULLTEXT INDEX ON Table (col1, col2) KEY INDEX TablePK WITH CHANGE_TRACKING AUTO 

然後我用它是這樣的:

SELECT col1, col2 
FROM Table t 
    INNER JOIN FREETEXTTABLE(Table, *, @SearchTerm) s ON s.[Key] = t.Id 
ORDER BY s.[Rank] DESC 

它返回正確的結果,但它需要大約30秒運行搜索,如果它沒有運行一段時間。運行一次後,所有進一步的搜索都是即時的。如果我放棄它並在一小時後回來,那麼第一次搜索會再次變慢。即使在此期間沒有更新表格,它似乎也會發生。

我試過這兩個完全不同的數據庫,完全不同的服務器上,並且行爲是相同的。在其中一個數據庫中,被索引的表格非常小​​(50行),另一個大一些(1000行)。

任何人都可以幫助我解決問題是什麼以及如何解決它?我唯一的選擇是完全放棄FULLTEXT,或者提供一項服務,每n分鐘運行一次搜索查詢!

+0

SQL-server在第一次運行後緩存結果。 x時間過後,某些內容會使緩存無效。 – Johan

+0

我應該說,即使對於來自原始慢查詢的不同查詢(具有不同的結果)它也是快速的。 – Paul

回答

6

默認情況下,SQL Server在一段時間不活動後卸載斷字器(300秒,AFAIR)。

重新加載它需要檢查需要向證書頒發者發送Internet請求的簽名。

請在開發服務器上運行此:

EXEC sp_fulltext_service 
       @action = 'verify_signature', 
       @value = 0 

,並看看是否有幫助。

更新:

http://support.microsoft.com/kb/915850/en-us

+0

完美,謝謝:-) – Paul

0

也許你的數據庫被設置爲自動關閉。

+0

不,autoclose關閉 – Paul

0

是服務器非常繁忙或有足夠的內存?我對全文搜索的工作原理並不十分了解,但如果服務器上有很多活動,它可能會把事情搞砸到磁盤。