Leistungssteigerung und Optimierung von Volltextabfragen
Die Leistung bei Volltextabfragen wird von den Hardwareressourcen wie Arbeitsspeicher, Datenträgergeschwindigkeit, CPU-Geschwindigkeit und Computerarchitektur beeinflusst.
Empfehlungen zum Erhöhen der Leistung der Volltextabfrage
Die folgenden Empfehlungen sollen Ihnen dabei helfen, die Leistung der Volltextabfrage zu erhöhen.
Defragmentieren Sie den Index der Basistabelle mithilfe von ALTER INDEX REORGANIZE.
Organisieren Sie den Volltextkatalog mithilfe von ALTER FULLTEXT CATALOG REORGANIZE neu. 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 ganzzahligen Volltextschlüssels können Sie eine Verknüpfung mit der Zuordnungstabelle docid vermeiden. Deshalb verbessert ein ganzzahliger Volltextschlüssel die Abfrageleistung erheblich und optimiert außerdem die Crawlleistung. Es können sich weitere Leistungsvorteile ergeben, wenn der Volltextschlüssel auch der Schlüssel des gruppierten Index ist. Weitere Informationen finden Sie unter Struktur der Volltextindizes und Vorgehensweise: Abfragen der Volltextschlüsselspalte (Transact-SQL).
Fassen Sie mehrere CONTAINS-Prädikate zu einem CONTAINS-Prädikat zusammen. Sie können in SQL Server 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. Mit top_n_by_rank wird nur eine Teilmenge der Ergebnisse sortiert nach Rangfolge zurückgegeben. Verwenden Sie diesen Parameter nur, wenn es beim vorliegenden Geschäftsmodell nicht erforderlich ist, alle möglichen Ergebnisse zurückzugeben (dass heißt, es wird kein Gesamtrückruf benötigt).
Hinweis Gesamtrückrufe werden i d. R. in juristischen Szenarien verlangt. In anderen Geschäftsszenarien, z. B. für das E-Business, sind Leistungsaspekte meist vorrangig.
Prüfen Sie den Volltextabfrageplan, um sicherzustellen, dass der entsprechende Verknüpfungsplan ausgewählt ist. Verwenden Sie ggf. einen Verknüpfungshinweis 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, organisieren Sie den Volltextkatalog neu, indem Sie die REORGANIZE-Option der ALTER FULLTEXT CATALOG-Transact-SQL-Anweisung verwenden. 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 SQL Server 2008 können die unter CONTAINSTABLE (AND, OR) angegebenen logischen Operatoren entweder als SQL-Verknüpfungen 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-Verknüpfungen aufweisen. Bei der Implementierung eines logischen Operators innerhalb der Volltextausführung STVF werden einige spezielle Indexeigenschaften verwendet, die gegenüber SQL-Verknüpfungen Geschwindigkeitsvorteile aufweisen. Aus diesem Grund ist es ratsam, für Frames von Abfragen möglichst nur einen Typ von logischem Operator zu verwenden.
Bei Anwendungen, die Prädikate mit selektiver Beziehung enthalten, funktionieren Abfragen, die selektive relationale Prädikate und nicht selektive Volltextprädikate verwenden, ggf. am besten, 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.
Anzeigen des Tokenisierungsergebnis einer Kombination aus Wörtertrennung, Thesaurus und Stoppliste
Nachdem Sie eine entsprechende Kombination aus Wörtertrennungen, Thesauren und Stopplisten auf eine eingegebene Abfragezeichenfolge angewendet haben, können Sie das Ergebnis der Tokenisierung anzeigen, indem Sie die dynamische Verwaltungssicht sys.dm_fts_parser verwenden. Weitere Informationen finden Sie unter sys.dm_fts_parser (Transact-SQL).
Siehe auch