全文查詢的效能優化

iSQlServer發表於2008-12-22

硬體資源(例如記憶體、磁碟速度、CPU 速度和計算機體系結構)會影響全文查詢的效能。

 提高全文查詢效能的建議
下面列出了有助於提高全文查詢效能的建議:

使用 ALTER INDEX REORGANIZE 對基表的索引進行碎片整理。

使用 ALTER FULLTEXT CATALOG REORGANIZE 重新組織全文目錄。請務必在效能測試之前執行此操作,因為它會導致該目錄中全文索引的主合併。

僅選擇較小的列作為全文鍵列。儘管支援 900 個位元組的列,但我們建議在全文索引中使用更小的鍵列。int 和 bigint 可提供最佳效能。

使用整數型全文鍵可以避免與 docid 對映表聯接。因此,整數型全文鍵可以使查詢效能獲得數量級的提升,並改進爬網效能。如果全文鍵也是聚集索引鍵,可能會進一步提高效能。有關詳細資訊,請參閱全文索引的結構和如何查詢全文鍵列 (Transact-SQL)。

將多個 CONTAINS 謂詞合併為一個 CONTAINS 謂詞。在 SQL Server 中,您可以在 CONTAINS 查詢中指定一個包含若干列的列表。

如果只需要全文鍵或排名的資訊,請使用 CONTAINSTABLE 或 FREETEXTTABLE,而不要使用分別與之對應的 CONTAINS 或 FREETEXT。

若要限制結果數並提高效能,請使用 FREETEXTTABLE 和 CONTAINSTABLE 函式的 top_n_by_rank 引數。使用 top_n_by_rank 可以只返回最密切相關的匹配項。僅當商業應用場景不需要返回所有可能的匹配項(即不需要“返回全部項”)時,才應使用此引數。
注意:
法律應用場景通常需要返回全部項,不過對於諸如電子商務等商業應用場景,效能可能更為重要。
 


檢查全文查詢計劃以確保選擇了適當的聯接計劃。若有必要,可使用一個聯接提示或查詢提示。如果全文查詢中使用了引數,則該引數的第一時間值決定查詢計劃。可以使用 OPTIMIZE FOR 查詢提示強制用您指定的值編譯查詢。這有助於實現確定性查詢計劃和更好的效能。

如果全文索引中的全文索引碎片太多,會導致查詢效能大幅下降。若要減少碎片數,請使用 ALTER FULLTEXT CATALOG Transact-SQL 語句的 REORGANIZE 選項重新組織全文目錄。實際上,該語句會將所有碎片合併成單個更大的碎片,並從全文索引中刪除所有過時的條目。

在 SQL Server 2008 全文搜尋中,在 CONTAINSTABLE (AND, OR) 中指定的邏輯運算子可以作為 SQL 聯接實現或在全文執行流式表值函式 (STVF) 中實現。通常,僅包含一種邏輯運算子的查詢完全由全文執行實現,而混合多種邏輯運算子的查詢還擁有 SQL 聯接。全文執行 STVF 內的邏輯運算子在實現時使用了一些特殊索引屬性,使它比 SQL 聯接速度快得多。由於這個原因,我們建議在可能的情況下僅使用一種邏輯運算子來構建查詢框架。

對於包含選擇性關係謂詞的應用程式,如果將使用選擇性關係謂詞和非選擇性全文謂詞的查詢編寫成使用查詢優化器,則這樣的查詢可能會有最佳效能。這將允許查詢優化器決定它是否可以利用謂詞或範圍下推來生成有效的查詢計劃。與將關係資料作為全文資料建立索引相比,此方法更簡單,通常也更高效。

 檢視斷字元、同義詞庫和非索引字表組合的詞語切分結果
對查詢字串輸入應用給定的斷字元、同義詞庫和非索引字表組合後,可以使用 sys.dm_fts_parser 動態管理檢視檢視詞語切分結果。有關詳細資訊,請參閱 sys.dm_fts_parser (Transact-SQL)。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-520815/,如需轉載,請註明出處,否則將追究法律責任。

相關文章