改善全文檢索查詢的效能

適用於:SQL ServerAzure SQL 資料庫Azure SQL 受控執行個體

以下建議清單能幫助你提升全文查詢的效能。

硬體資源如記憶體、磁碟速度、CPU 速度及機器架構都會影響全文查詢的效能。

  • 使用 ALTER INDEX REORGANIZE 來重組基底表的索引。

  • 使用ALTER FULLTEXT CATALOG REORGANIZE來重新整理全文目錄。 過多的全文索引片段會導致查詢效能大幅下降。 此陳述會將所有片段依每個索引合併為一個較大的單一片段,並移除所有陳舊的出現資訊。 請務必在進行效能測試之前執行此陳述式,因為執行此陳述式會導致該目錄中全文檢索索引的主要合併作業。

  • 請將所選的全文檢索鍵資料行限制為較小的資料行。 雖然支援 900 位元組欄位,但在全文索引中請使用較小的鍵欄位。 int 和 bigint 會提供最佳效能。

  • 使用整數全文鍵可避免與 docid 映射表的連接,提升查詢與爬取效能。 若全文鍵同時也是叢集索引鍵,則可進一步提升效能。

  • 將多個 CONTAINS 謂詞合併成一個 CONTAINS 謂詞。 在 SQL Server 中,你可以指定查詢中的CONTAINS欄位清單。

  • 如果你只需要全文鍵或排名資訊,請分別使用 CONTAINSTABLE 或 FREETEXTTABLE ,而非 CONTAINS 或 FREETEXT。

  • 若要限制結果並提升效能,請使用 FREETEXTTABLE 和 CONTAINSTABLE 函數的 top_n_by_rank 參數。 top_n_by_rank 可讓您僅擷取最相關的結果。 只有在您的業務情境不需要找回所有可能的結果時,才使用此參數(也就是說,不需要 完整召回)。

    注意

    全面召回通常在法律情境中是必要的,但在商業情境(如電子商務)中,可能不如績效考量重要。

  • 請檢查全文檢索查詢計畫,確定已選擇適當的聯結計畫。 如果有需要,請使用聯結提示或查詢提示。 如果在全文檢索查詢中使用某個參數,該參數的首次值就會決定查詢計畫。 你可以用查詢 OPTIMIZE FOR提示 強制讓查詢編譯到你想要的值。 這有助於達成決定性的查詢計畫和更佳的效能。

  • 在全文檢索中,在 CONTAINSTABLE (AND, OR) 中指定的邏輯運算子可以實作為 Transact-SQL 聯結,也可以在全文檢索執行的串流資料表值函式(STVF)內實作。 通常,僅有一種邏輯運算子的查詢會以全文執行實現,而混合邏輯運算子的查詢則包含 SQL 連接。 在全文檢索執行 STVF 內實作邏輯運算子時,會使用一些特殊的索引屬性,因此其執行速度比 SQL 聯結更快。 因此,盡可能只使用單一類型的邏輯運算子來架構查詢。

  • 對於包含選擇性關聯謂詞的應用程式,使用選擇性關聯謂詞與非選擇性全文謂詞的查詢,若是依照查詢優化器撰寫,表現可能最佳。 此方法可讓查詢最佳化工具判斷是否能利用述詞下推或範圍下推,產生有效的查詢執行計畫。 這種方法比較簡單,而且通常會比將關聯式資料當做全文檢索資料進行索引更有效率。

SQL Server 2008 全文檢索:內部機制與增強功能