Questa pagina fornisce una panoramica concettuale del filtro adattivo in AlloyDB AI, una funzionalità progettata per ottimizzare le ricerche vettoriali filtrate.
Che cos'è il filtraggio adattivo?
Il filtro adattivo analizza i pattern di query e le distribuzioni dei dati durante l'esecuzione della query per scegliere dinamicamente la strategia di filtraggio più efficiente, ad esempio il filtraggio in linea o preliminare.
Lo strumento di ottimizzazione delle query di AlloyDB AI utilizza l'analisi basata sui costi per determinare se il filtro in linea o il pre-filtraggio offrono le prestazioni migliori in un determinato momento durante l'esecuzione della query.
Questo tipo di ottimizzazione supporta le ricerche vettoriali filtrate di AlloyDB AI, in cui il filtro adattivo passa automaticamente dall'utilizzo dell'indice vettoriale a quello dei metadati, producendo risultati efficienti e accurati senza intervento manuale.
Passaggio dinamico da una strategia di filtraggio all'altra
Il filtro adattivo passa automaticamente e dinamicamente dalle strategie di filtro in linea a quelle di prefiltraggio durante l'esecuzione delle query in base ai pattern di query e alle distribuzioni dei dati in tempo reale. L'ottimizzatore di query AlloyDB AI utilizza l'analisi basata sui costi per determinare quale strategia offre il miglior rendimento in un determinato momento.
Dall'inline al pre-filtro
Quando l'ottimizzatore determina che il pre-filtraggio è più efficiente, il filtro adattivo attiva il passaggio dal filtro in linea al pre-filtraggio durante l'esecuzione. Il piano di query cambia in modo dinamico per riflettere questa modifica.
Ad esempio, il piano può mostrare Bitmap assisted pre-filtering
nel campo Strategia di esecuzione quando l'ottimizzatore determina che il pre-filtraggio è più efficiente in quel punto della query. Questa modifica dinamica si verifica man mano che il sistema si adatta ai dati effettivi che incontra durante l'esecuzione della query.
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)
Quando si utilizza Execution Strategy: Bitmap assisted pre-filtering
, un Bitmap Index Scan
separato filtra prima un set di dati di grandi dimensioni. Se questo pre-filtraggio restringe efficacemente i candidati, l'indice vettoriale non viene utilizzato per la ricerca finale di similarità vettoriale.
Dal pre-filtro al filtro in linea
Il filtro adattivo può anche passare dinamicamente dal pre-filtraggio al filtraggio in linea se l'ottimizzatore di query AlloyDB AI determina che il filtraggio in linea è più efficiente per le caratteristiche della query corrente.
In questi casi, il piano di query viene modificato in modo dinamico per riflettere un'elaborazione più diretta dei dati vettoriali senza una fase di pre-filtraggio esplicita precedente alla scansione vettoriale. Questa adattabilità consente di ottenere prestazioni ottimali man mano che le distribuzioni dei dati o parametri di ricerca cambiano durante l'esecuzione.
Ad esempio, il piano di query mostra vector scan
nel campo Strategia di esecuzione quando l'ottimizzatore determina che una strategia di filtro in linea è più efficiente per la query specificata.
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 questo esempio, Execution Strategy
mostra Bitmap assisted vector Scan on scann_idx
, con un Bitmap Index Scan
sottostante su btree_idx
. Ciò indica che la ricerca vettoriale utilizza un filtro bitmap, che la scansione dell'indice bitmap genera in base alla condizione int_col <= 100000000
. Custom Scan (vector scan)
elabora quindi solo le righe identificate da questa bitmap, integrando il filtro direttamente nel processo di scansione vettoriale.