Verbessern der Leistung von Volltextabfragen

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

Die folgende Liste von Empfehlungen kann Ihnen helfen, die Leistung von Volltextanfragen zu verbessern.

Hardwareressourcen wie Speicher, Festplattengeschwindigkeit, CPU-Geschwindigkeit und Maschinenarchitektur können die Leistung von Volltextabfragen beeinflussen.

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

  • Ordnen Sie den Volltextkatalog mithilfe von ALTER FULLTEXT CATALOG REORGANIZE neu an. Zu viele Volltext-Indexfragmente können zu erheblichen Verschlechterungen der Abfrageleistung führen. Diese Aussage fasst alle Fragmente zu einem einzigen, größeren Fragment pro Index zusammen und entfernt alle veralteten Vorkommensinformationen. Stellen Sie sicher, dass Sie diese Anweisung vor dem Performance-Test ausführen, da das Ausführen dieser Anweisung eine Master-Zusammenführung der Volltextindizes in diesem Katalog verursacht.

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

  • Die Verwendung eines ganzzahligen Volltextschlüssels vermeidet einen Join mit der docid-Mapping-Tabelle , was die Abfrage- und Crawl-Leistung verbessert. Zusätzliche Leistungsverbesserungen sind möglich, wenn der Volltextschlüssel auch der Cluster-Indexschlüssel ist.

  • Kombinieren Sie mehrere CONTAINS-Prädikate zu einem Prädikat CONTAINS . In SQL Server kannst du eine Liste von Spalten in der CONTAINS Abfrage angeben.

  • Wenn Sie nur Volltextschlüssel- oder Ranginformationen benötigen, verwenden Sie CONTAINSTABLE oder FREETEXTTABLE anstelle von CONTAINS oder FREETEXT, jeweils.

  • Um die Ergebnisse zu begrenzen und die Leistung zu erhöhen, verwenden Sie den Parameter top_n_by_rank der Funktionen FREETEXTTABLE und CONTAINSTABLE. Mittop_n_by_rank können Sie nur die relevantesten Treffer aufrufen. Verwenden Sie diesen Parameter nur, wenn es beim vorliegenden Geschäftsmodell nicht erforderlich ist, alle möglichen Ergebnisse zurückzugeben (d.h., es wird kein Gesamtrückrufbenötigt).

    Hinweis

    Totaler Rückruf ist typischerweise für rechtliche Szenarien notwendig, aber bei Geschäftsszenarien wie einem E-Business möglicherweise weniger wichtig als die Leistung.

  • 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 FORAbfragehinweis verwenden, um die Kompilierung der Abfrage mit dem von Ihnen gewünschten Wert zu erzwingen. Dadurch wird ein deterministischer Abfrageplan und bessere Leistung erzielt.

  • Bei der Volltextsuche können die in CONTAINSTABLE (AND, OR) angegebenen logischen Operatoren entweder als Transact-SQL-Verknüpfungen oder innerhalb der streamenden tabellenwertigen Funktionen zur Volltextausführung (STVF) implementiert werden. Typischerweise werden Abfragen mit nur einem Typ logischer Operatoren ausschließlich durch Volltextausführung implementiert, während Abfragen, die logische Operatoren mischen, ebenfalls SQL-Joins besitzen. 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 sollten Sie, wenn möglich, Ihre Abfragen nur mit einem einzigen logischen Operator einrahmen.

  • Für Anwendungen, die selektive relationale Prädikate enthalten, können Abfragen, die selektive relationale Prädikate und unselektive Volltextprädikate verwenden, am besten abschneiden, wenn sie so geschrieben sind, dass sie den Abfrageoptimierer verwenden. Dieser Ansatz ermöglicht es dem Abfrageoptimierer zu entscheiden, ob er Prädikat- oder Bereichs-Pushdown nutzen kann, um einen effektiven Abfrageplan zu erstellen. Dieser Ansatz ist einfacher und häufig auch effizienter als das Indizieren von relationalen Daten als Volltextdaten.

SQL Server 2008-Volltextsuche: Internes und Erweiterungen