Auf dieser Seite werden Best Practices für die Vektorindexierung beschrieben, mit denen Sie Ihre Vektorindizes optimieren und die Ergebnisse von ANN-Abfragen (Approximate Nearest Neighbor) verbessern können.
Optionen für die Vektorsuche anpassen
Die optimalen Werte für Ihre Vektorindexoptionen hängen von Ihrem Anwendungsfall, Ihrem Vektordatensatz und den Abfragevektoren ab. Sie können diese Werte festlegen und optimieren, indem Sie einen neuen Vektorindex erstellen und index_option_list
in der CREATE VECTOR INDEX
-Anweisung festlegen. Möglicherweise müssen Sie die Werte für Ihre spezifische Arbeitslast iterativ optimieren.
Hier sind einige hilfreiche Richtlinien für die Auswahl geeigneter Werte:
tree_depth
(Baumebene): Wenn die Tabelle, die Sie indexieren, weniger als 10 Millionen Zeilen hat, verwenden Sie fürtree_depth
den Wert2
. Andernfalls unterstützt eintree_depth
von3
Tabellen mit bis zu etwa 10 Milliarden Zeilen.num_leaves
: Verwenden Sie die Quadratwurzel der Anzahl der Zeilen im Dataset. Ein größerer Wert kann die Build-Zeit des Vektorindex verlängern. Vermeiden Sie es,num_leaves
größer alstable_row_count
/ 1.000 festzulegen, da dies zu zu kleinen Blättern und einer schlechten Leistung führt.num_leaves_to_search
: Mit dieser Option wird angegeben, wie viele Blattknoten des Index durchsucht werden. Durch Erhöhen vonnum_leaves_to_search
wird der Recall verbessert, aber auch die Latenz und die Kosten steigen. Wir empfehlen, fürnum_leaves_to_search
eine Zahl zu verwenden, die 1% der Gesamtzahl der Blätter ist, die in derCREATE VECTOR INDEX
-Anweisung definiert sind. Wenn Sie eine Filterklausel verwenden, erhöhen Sie diesen Wert, um die Suche auszuweiten.
Wenn ein akzeptabler Recall erreicht wird, die Kosten für Abfragen jedoch zu hoch sind, was zu einer niedrigen maximalen QPS führt, versuchen Sie, num_leaves
zu erhöhen. Gehen Sie dazu so vor:
- Setzen Sie
num_leaves
auf ein Vielfaches k des ursprünglichen Werts (z. B.2 * sqrt(table_row_count)
). - Legen Sie
num_leaves_to_search
als das k-fache des ursprünglichen Werts fest. - Reduzieren Sie
num_leaves_to_search
, um Kosten und QPS zu verbessern und gleichzeitig den Recall beizubehalten.
Recall verbessern
Um den Recall zu verbessern, können Sie den num_leaves_to_search
-Wert anpassen oder den Vektorindex neu erstellen.
Erhöhen Sie den Wert von num_leaves_to_search
.
Wenn der Wert von num_leaves_to_search
zu klein ist, kann es schwieriger sein, die nächsten Nachbarn für einige Anfragevektoren zu finden. Wenn Sie einen neuen Vektorindex mit einem höheren num_leaves_to_search
-Wert erstellen, kann dies die Erinnerung verbessern, da mehr Blätter durchsucht werden. Die letzten Suchanfragen enthalten möglicherweise mehr dieser anspruchsvollen Vektoren.
Vektorindex neu erstellen
Die Baumstruktur des Vektorindex wird zum Zeitpunkt der Erstellung für den Datensatz optimiert und ist danach statisch. Wenn nach der Erstellung des ursprünglichen Vektorindex deutlich unterschiedliche Vektoren hinzugefügt werden, ist die Baumstruktur möglicherweise suboptimal, was zu einem schlechteren Recall führt.
So erstellen Sie Ihren Vektorindex ohne Ausfallzeiten neu:
- Erstellen Sie einen neuen Vektorindex für dieselbe Einbettungsspalte wie den aktuellen Vektorindex und aktualisieren Sie die Parameter (z. B.
OPTIONS
) entsprechend. - Nachdem der Index erstellt wurde, verwenden Sie den
FORCE_INDEX
-Hinweis, um auf den neuen Index zu verweisen und die Vektorsuchanfrage zu aktualisieren. So wird sichergestellt, dass für die Abfrage der neue Vektorindex verwendet wird. Möglicherweise müssen Sienum_leaves_to_search
in Ihrer neuen Abfrage neu abstimmen. - Löschen Sie den veralteten Vektorindex.
Nächste Schritte
Weitere Informationen zu ungefähren nächsten Nachbarn in Spanner
Weitere Informationen zu
VECTOR INDEX
-Anweisungen in GoogleSQL