Auf dieser Seite finden Sie einen konzeptionellen Überblick über die adaptive Filterung in AlloyDB AI, einer Funktion zur Optimierung gefilterter Vektorsuchen.
Was ist die adaptive Filterung?
Beim adaptiven Filtern werden Abfragemuster und Datenverteilungen während der Abfrageausführung analysiert, um dynamisch die effizienteste Filterstrategie auszuwählen, z. B. Inline- oder Vorabfilterung.
Das AlloyDB AI-Abfrageoptimierungstool verwendet die kostenbasierte Analyse, um zu ermitteln, ob Inline-Filterung oder Vorfilterung zu einem bestimmten Zeitpunkt während der Abfrageausführung die beste Leistung bietet.
Diese Art der Optimierung unterstützt die gefilterten Vektorsuchen von AlloyDB AI, bei denen das adaptive Filtern automatisch zwischen der Verwendung von Vektor- und Metadatenindex wechselt. So werden effiziente und genaue Ergebnisse ohne manuellen Eingriff erzielt.
Dynamisches Wechseln zwischen Filterstrategien
Beim adaptiven Filtern wird während der Ausführung von Abfragen automatisch und dynamisch zwischen Inline-Filterung und Vorfilterung gewechselt. Die Entscheidung basiert auf Echtzeit-Abfragemustern und Datenverteilungen. Das AlloyDB AI-Abfrageoptimierungstool verwendet eine kostenbasierte Analyse, um zu ermitteln, welche Strategie zu einem bestimmten Zeitpunkt die beste Leistung bietet.
Von Inline- zu Vorfilterung
Wenn der Optimierer feststellt, dass die Vorabfilterung effizienter ist, wird durch die adaptive Filterung während der Ausführung von der Inline-Filterung zur Vorabfilterung gewechselt. Der Abfrageplan wird dynamisch angepasst.
Im Plan kann beispielsweise Bitmap assisted pre-filtering
im Feld Ausführungsstrategie angezeigt werden, wenn das Optimierungsprogramm feststellt, dass Vorabfilterung an dieser Stelle in der Abfrage effizienter ist. Diese dynamische Änderung erfolgt, wenn das System sich an die tatsächlichen Daten anpasst, die während der Ausführung der Abfrage auftreten.
Limit (actual rows=10 loops=1)
-> Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
Execution Strategy: Bitmap assisted pre-filtering
Order By: (vec_col <=> '[...]'::vector)
Limit: 10
-> Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
Index Cond: (int_col <= 100000000)
Wenn Sie Execution Strategy: Bitmap assisted pre-filtering
verwenden, wird ein großes Dataset zuerst durch ein separates Bitmap Index Scan
gefiltert. Wenn durch diese Vorfilterung die Kandidaten effektiv eingegrenzt werden, wird der Vektorindex nicht für die endgültige Suche nach Vektorähnlichkeit verwendet.
Vom Vorfiltern zum Inline-Filtern
Beim adaptiven Filtern kann auch dynamisch von der Vorabfilterung zur Inline-Filterung gewechselt werden, wenn der AlloyDB AI-Abfrageoptimierer feststellt, dass die Inline-Filterung für die aktuellen Abfrageeigenschaften effizienter ist.
In solchen Fällen wird der Anfrageplan dynamisch angepasst, um eine direktere Verarbeitung der Vektordaten ohne expliziten Vorfilterungsschritt vor dem Vektorscan zu ermöglichen. Diese Anpassungsfähigkeit trägt dazu bei, dass eine optimale Leistung erzielt wird, wenn sich Datenverteilungen oder Abfrageparameter während der Laufzeit ändern.
Im Feld Execution Strategy (Ausführungsstrategie) wird beispielsweise vector scan
angezeigt, wenn das Optimierungsprogramm feststellt, dass eine Inline-Filterstrategie für die jeweilige Abfrage effizienter ist.
Limit (actual rows=10 loops=1)
-> Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
Execution Strategy: Bitmap assisted vector Scan on scann_idx
Order By: (vec_col <=> '[...]'::vector)
Limit: 10
Num Requalifications: 0
Num filtered: 1000
-> Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
Index Cond: (int_col <= 100000000)
In diesem Beispiel wird Execution Strategy
als Bitmap assisted vector Scan on scann_idx
dargestellt, mit einem zugrunde liegenden Bitmap Index Scan
auf btree_idx
. Dies weist darauf hin, dass die Vektorsuche einen Bitmap-Filter verwendet, der vom Bitmap-Indexscan basierend auf der Bedingung int_col <= 100000000
generiert wird. Die Custom Scan (vector scan)
verarbeitet dann nur die durch diese Bitmap identifizierten Zeilen und integriert die Filterung direkt in den Vektorscanprozess.