Sql-Server-2008

全文索引不尊重已刪除的單詞 - 它們仍然被索引

  • April 13, 2015

我在其目錄中選中了一個定義為“自動”單選按鈕的全文索引。當我修改全文索引列中的單詞時,新單詞出現在 sys.dm_fts_index_keywords 中,但舊的更新值並沒有消失,仍然顯示在列表中。當從列中刪除一個單詞時也是如此。當我重建目錄時,雖然舊的(或刪除的)單詞從列表中刪除。看起來全文索引不尊重已刪除的單詞。為什麼會這樣?

在現實世界環境中,遇到關鍵字然後將其刪除並且永遠不會再次遇到的情況非常低。

在全文索引過程中更新記錄的過程可能會刪除所有以前對該記錄的引用,然後更新所有新的引用。因此,當刪除對關鍵字的引用時,它不知道該關鍵字將不再存在,因為它尚未索引新文件。

插入新關鍵字(鎖和類似關鍵字)需要花費微不足道但非零的時間,並且一直刪除和重新插入這些關鍵字會影響索引更新性能(特別是因為在大多數情況下很少有太多孤立的單詞) . 但最重要的是,我懷疑最大的原因是這種變化會對索引碎片產生影響。

當不再引用該關鍵字時,可能有一種方法可以將其從索引中刪除,但在現實世界中,通過保留這些孤立的關鍵字,您不會看到任何明顯的性能下降。您會看到有很大比例的關鍵字出現並在記錄更新中消失的唯一情況是您使用大量隨機內容填充內容 - 在這種情況下,您的索引性能無論如何都會非常糟糕,因為您的關鍵字會涵蓋所有文件的非常小的百分比。

引用自:https://dba.stackexchange.com/questions/93731