背景
在SQL Server 2008中,我使用一個表名爲船名爲boatType列全文索引的行。包含SQL Server 2008中斷言,也不返回所有它應該
boatType字段包含船所屬的boatType的逗號分隔列表。例如「多體船,三體船,巡洋艦」。
,它的搜索使用CONTAINS謂詞像這樣我的SQL查詢:
CONTAINS(boatType ' 「多體」')
問題
我發現一切工作正常,直到最近一個特定的行沒有被返回,但是,具有完全相同數據的其他行被返回。
的短期解決方案
我試圖從boatType塔取出全文索引重建索引,然後重新添加。我等待索引重新填充,並解決了問題,即所有預期的行被返回。
什麼是長期解決方案?
好的,這個問題在短期內得到修復,但是如果這種情況一旦發生,可能會再次發生。
我假設(可能錯誤地)全文索引中的「更改跟蹤=自動」設置意味着對數據的任何更新都會導致索引的自動更新。
我還沒有設置任何人口調度表,因爲我假設我不需要如果使用「更改跟蹤=自動」。再一次,也許我錯了。
爲了支持我上面的假設,添加到數據庫或已更改的新數據似乎觸發了索引的更新,因爲大多數應該出現在搜索中的行確實出現。這只是少數。
這裏做的最好的事情是什麼?
也許更適合DBA,因爲它是一個非常集中的問題。 – 2012-08-25 07:35:29
理想情況下(不錯),您不應該用逗號分隔列表來表示船型。我有一個船型桌子和一個多對多的小船和船型映射表。 –
我同意@pst。我有一個建議,(這不是一個答案,所以我把它寫成註釋:創建一個船類型的查找表,然後,或者創建一個連接表或用整數ID替換逗號分隔的文本並使用拆分函數所以你可以在該列上使用內部連接。 –