2010-11-02 91 views
4

我在SQL Server 2008 x64上有全文索引問題。全文搜索「包含」比「Like%」要慢

我有三個表:

表A與90個000行

表B 12個000 000行

表C具有22個000 000行

我創建FTS目錄與autopopulation。

當我查詢表A:

Select * from TableA where Contains(field1, '"j*"') 

我看到較少11000個記錄然後1秒

但是,當我查詢表B或表C具有相同的查詢我看到在2秒內250條記錄。這顯然非常緩慢。

查詢「like%」而不是「contains」對於相同的表執行少於1秒。

問題是否存在是因爲大表B和C?表A查詢成功。

也許這些表需要更多時間進行索引? (但他們索引(填充)3幾天了)

一些細節:

對於表B和CI總是看到 「人口狀況=處理的通知」(9)

屬性 「TableFulltextDocsProcessed」 總是增加

(我的SQL服務器有一個鏡像的實例。)

+1

*「但他們正在索引(填充)3天」* < - 您是說索引尚未完成建設?當然,它沒有索引就慢一些。您還表示狀態始終爲「處理通知」。 SQL Server是否捱餓MSFTESQL/MSSEARCH內存,也許這就是爲什麼需要時間才能完成全文索引? – 2010-11-02 12:27:32

+0

「,但它們已經索引(填充)了3天」< - - 應該完成Indixing:FTS Catalog的「Item Count」屬性等於必要表的行數,我等了3天,查詢仍然很慢。 奇怪的是,TableA中沒有太多記錄被成功查詢。所以我認爲表B和C需要更多時間來構建一些緩存或其他東西...... 關於內存設置:它們是默認設置。我在服務器上看不到任何內存問題。 另外我的服務器有一個鏡像實例。這能影響我的問題嗎? – 2010-11-02 13:21:12

回答

1

我不知道,如果你的包含查詢真正使用全文索引。我認爲它必須進行全表掃描。因爲我已經理解了不同語言中的全文索引索引詞和詞幹。你喜歡的查詢

Select * from TableA where Contains(field1, '"j*"') 

只有炭「Ĵ」中,如果你做了與

Select field1 from TableA where Contains(field1, 'fish') 

相同的搜索相比,

Select field1 from TableA where field1 like '%fish%' 

在這個報價,他們談很多字不是字符。 SQL Server 2005 Full-Text Search: Internals and Enhancements

全文搜索允許快速和基於關鍵字的查詢 存儲在SQL Server數據庫的文本數據的 靈活的索引。不同於LIKE 謂詞,這僅適用於 字符模式,全文查詢 執行對 一種語言搜索這些數據,基於特定 語言規則的單詞和短語 操作。

所以我想知道如果第j *工作,如果這樣一句話:「J」必須是在該全文用於與語言文字.. 看到 CONTAINS (Transact-SQL)

指定從指定文本開始的單詞或短語 的匹配。 用雙 引號(「」)前綴術語和結束 引號前添加一個星號 (),以便開始與星號前指定的簡單用語 所有文字 是 匹配。該條款應該是這樣指定的 :CONTAINS(列, '「文本'')。星號匹配零, 一個或多個字符

什麼是執行計劃的樣子(該詞或短語根 字或詞的)?