Verbessern der Leistung von Volltextabfragen

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Die folgende Liste der Empfehlungen trägt dazu bei, die Leistung von Volltextabfragen zu verbessern.

Die Leistung bei Volltextabfragen wird auch von den Hardwareressourcen wie Arbeitsspeicher, Datenträgergeschwindigkeit, CPU-Geschwindigkeit und Computerarchitektur beeinflusst.

  • Defragmentieren Sie den Index der Basistabelle mithilfe von ALTER INDEX REORGANIZE.

  • Organisieren Sie den Volltextkatalog mithilfe von ALTER FULLTEXT CATALOG REORGANIZEneu. Stellen Sie sicher, dass dies vor dem Leistungstest erfolgt, da das Ausführen dieser Anweisung zu einer Masterzusammenführung der Volltextindizes im Katalog führt.

  • Beschränken Sie die Auswahl von Volltextschlüsselspalten auf eine kleine Spalte. Es wird zwar eine 900-Byte-Spalte unterstützt, aber es ist ratsam, in einem Volltextindex eine kleinere Schlüsselspalte zu verwenden. int und bigint bieten die beste Leistung.

  • Durch die Verwendung eines Volltextschlüssels mit ganzen Zahlen können Sie einen Join mit der Zuordnungstabelle docid vermeiden. Deshalb verbessert ein ganzzahliger Volltextschlüssel die Abfrageleistung erheblich und optimiert außerdem die Durchforstungsleistung. Weitere Leistungsvorteile können dazu führen, wenn der Volltextschlüssel auch der gruppierte Indexschlüssel ist.

  • Fassen Sie mehrere CONTAINS -Prädikate zu einem CONTAINS-Prädikat zusammen. In SQL Server können Sie eine Liste von Spalten in der CONTAINS-Abfrage angeben.

  • Verwenden Sie CONTAINSTABLE oder FREETEXTTABLE statt CONTAINS bzw. FREETEXT, wenn Sie nur Volltextschlüssel- oder Ranginformationen benötigen.

  • Verwenden Sie den top_n_by_rank -Parameter der Funktionen FREETEXTTABLE und CONTAINSTABLE, um die Ergebnisse einzuschränken und die Leistung zu erhöhen. Mittop_n_by_rank können Sie nur die relevantesten Treffer aufrufen. Verwenden Sie diesen Parameter nur, wenn ihr Geschäftsszenario nicht alle möglichen Treffer zurückrufen muss (d. h. es ist kein totaler Rückruf erforderlich).

    Hinweis

    Gesamtrückrufe werden i d. R. in juristischen Szenarios verlangt. In anderen Geschäftsszenarios, z. B. für das E-Business, sind Leistungsaspekte meist vorrangig.

  • Prüfen Sie den Volltextabfrageplan, um sicherzustellen, dass der entsprechende Joinplan ausgewählt ist. Verwenden Sie ggf. einen Joinhinweis oder einen Abfragehinweis. Wenn ein Parameter in der Volltextabfrage verwendet wird, bestimmt der erste Wert dieses Parameters den Abfrageplan. Sie können den OPTIMIZE FOR- Abfragehinweis verwenden, um die Abfrage zu zwingen, einen von Ihnen ausgewählten Wert zu kompilieren. Dadurch wird ein deterministischer Abfrageplan und bessere Leistung erzielt.

  • Zu viele Volltextindexfragmente im Volltextindex können zu einer beträchtlichen Verringerung der Abfrageleistung führen. Um die Anzahl der Fragmente zu reduzieren, ordnen Sie den Volltextkatalog mithilfe der REORGANIZE-Option der ALTER FULLTEXT CATALOGTransact-SQL-Anweisung neu an. Diese Anweisung führt im Wesentlichen alle Fragmente zu einem einzelnen großen Fragment zusammen und entfernt alle veralteten Einträge aus dem Volltextindex.

  • Bei der Volltextsuche in können die unter CONTAINSTABLE (AND, OR) angegebenen logischen Operatoren entweder als SQL-Joins oder innerhalb der Streaming-Tabellenwertfunktionen (STVF) der Volltextausführung implementiert werden. Normalerweise werden Abfragen, die nur über einen Typ von logischen Operatoren verfügen, ausschließlich über die Volltextausführung implementiert, während Abfragen mit gemischten logischen Operatoren auch SQL-Joins aufweisen. Bei der Implementierung eines logischen Operators innerhalb der Volltextausführung STVF werden einige spezielle Indexeigenschaften verwendet, die gegenüber SQL-Joins Geschwindigkeitsvorteile aufweisen. Aus diesem Grund wird empfohlen, ihre Abfragen nach Möglichkeit nur mit einem einzigen Logischen Operatortyp zu framen.

  • Für Anwendungen, die selektive Beziehungs-Prädikate enthalten, können Abfragen, die selektive relationale Prädikate und nichtmarkierte Volltext-Prädikate verwenden, am besten funktionieren, wenn sie für die Verwendung des Abfrageoptimierers geschrieben werden. Dann kann der Abfrageoptimierer entscheiden, ob ein Prädikats- oder Bereichs-Pushdown verwendet werden kann, um einen effektiven Abfrageplan aufzustellen. Dieser Ansatz ist einfacher und häufig auch effizienter als das Indizieren von relationalen Daten als Volltextdaten.

SQL Server 2008-Volltextsuche: Internes und Erweiterungen

Siehe auch

sys.dm_fts_memory_buffers (Transact-SQL)
sys.dm_fts_memory_pools (Transact-SQL)