2012-08-25 22 views
3

背景

在SQL Server 2008中,我使用一個表名爲船名爲boatType列全文索引的行。包含SQL Server 2008中斷言,也不返回所有它應該

boatType字段包含船所屬的boatType的逗號分隔列表。例如「多體船,三體船,巡洋艦」。

,它的搜索使用CONTAINS謂詞像這樣我的SQL查詢:

CONTAINS(boatType ' 「多體」')

問題

我發現一切工作正常,直到最近一個特定的行沒有被返回,但是,具有完全相同數據的其他行被返回。

的短期解決方案

我試圖從boatType塔取出全文索引重建索引,然後重新添加。我等待索引重新填充,並解決了問題,即所有預期的行被返回。

什麼是長期解決方案?

好的,這個問題在短期內得到修復,但是如果這種情況一旦發生,可能會再次發生。

我假設(可能錯誤地)全文索引中的「更改跟蹤=自動」設置意味着對數據的任何更新都會導致索引的自動更新。

我還沒有設置任何人口調度表,因爲我假設我不需要如果使用「更改跟蹤=自動」。再一次,也許我錯了。

爲了支持我上面的假設,添加到數據庫或已更改的新數據似乎觸發了索引的更新,因爲大多數應該出現在搜索中的行確實出現。這只是少數。

這裏做的最好的事情是什麼?

+0

也許更適合DBA,因爲它是一個非常集中的問題。 – 2012-08-25 07:35:29

+0

理想情況下(不錯),您不應該用逗號分隔列表來表示船型。我有一個船型桌子和一個多對多的小船和船型映射表。 –

+0

我同意@pst。我有一個建議,(這不是一個答案,所以我把它寫成註釋:創建一個船類型的查找表,然後,或者創建一個連接表或用整數ID替換逗號分隔的文本並使用拆分函數所以你可以在該列上使用內部連接。 –

回答

0

你不能依靠全文索引並行更新與更新索引數據,從MS Docs

全文索引是在後臺更新。但是,這樣 傳播更改可能不會立即反映在索引中。

如果你需要船類型搜索是100%uptodate,創建一個船類型表和一個多對多的映射表加入船到船類型。

+0

感謝Will--這聽起來像是一個完美的解決方案,但需要一段時間才能實現,因爲我的應用程序中有很多部分需要更改。是否有可能使臨時解決方案使全文索引更新比目前更爲規律(它不一定是最新版本 - 即使在幾個小時之後也會如此 - 但這個特定問題索引仍然沒有更新在數據發生變化之後的一週),相比之下,全指數人羣只需要幾分鐘。 –

相關問題