En esta página, se proporciona una descripción general conceptual del filtrado adaptativo en AlloyDB AI, una función diseñada para optimizar las búsquedas de vectores filtradas.
¿Qué es el filtrado adaptable?
El filtrado adaptable analiza los patrones de búsqueda y las distribuciones de datos durante la ejecución de la búsqueda para elegir de forma dinámica la estrategia de filtrado más eficiente, como el filtrado previo o intercalado.
El optimizador de consultas de AlloyDB AI usa el análisis basado en costos para determinar si el filtrado intercalado o el filtrado previo proporcionan el mejor rendimiento en cualquier punto durante la ejecución de la consulta.
Este tipo de optimización admite las búsquedas vectoriales filtradas de AlloyDB AI, en las que el filtrado adaptable cambia automáticamente entre el uso del índice de vectores y el de metadatos, lo que produce resultados eficientes y precisos sin intervención manual.
Cambio dinámico entre estrategias de filtrado
El filtrado adaptativo cambia de forma automática y dinámica entre las estrategias de filtrado intercalado y de prefiltrado durante la ejecución de la consulta en función de los patrones de consulta y las distribuciones de datos en tiempo real. El optimizador de consultas de IA de AlloyDB usa el análisis basado en costos para determinar qué estrategia proporciona el mejor rendimiento en un momento determinado.
De la visualización intercalada al prefiltrado
Cuando el optimizador determina que el prefiltrado es más eficiente, el filtrado adaptable activa un cambio del filtrado intercalado al prefiltrado durante la ejecución. El plan de consultas cambia de forma dinámica para reflejar esto.
Por ejemplo, el plan puede mostrar Bitmap assisted pre-filtering
en el campo Estrategia de ejecución cuando el optimizador determina que el filtrado previo es más eficiente en ese punto de la consulta. Este cambio dinámico se produce a medida que el sistema se adapta a los datos reales que encuentra durante la ejecución de la búsqueda.
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)
Cuando se usa Execution Strategy: Bitmap assisted pre-filtering
, primero se filtra un conjunto de datos grande con un Bitmap Index Scan
independiente. Si este prefiltrado reduce de manera eficaz la cantidad de candidatos, no se usa el índice de vectores para la búsqueda final de similitud de vectores.
Del prefiltrado al filtrado intercalado
El filtrado adaptable también puede cambiar de forma dinámica del prefiltrado al filtrado intercalado si el optimizador de consultas de AlloyDB AI determina que el filtrado intercalado es más eficiente para las características de la consulta actual.
En esos casos, el plan de consulta se ajusta de forma dinámica para reflejar un procesamiento más directo de los datos vectoriales sin un paso de prefiltrado explícito que preceda al análisis de vectores. Esta adaptabilidad ayuda a lograr un rendimiento óptimo a medida que cambian las distribuciones de datos o los parámetros de búsqueda durante el tiempo de ejecución.
Por ejemplo, el plan de consultas muestra vector scan
en el campo Estrategia de ejecución cuando el optimizador determina que una estrategia de filtrado intercalado es más eficiente para la consulta determinada.
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)
En este ejemplo, el Execution Strategy
muestra Bitmap assisted vector Scan on scann_idx
, con un Bitmap Index Scan
subyacente en btree_idx
. Esto indica que la búsqueda de vectores usa un filtro de mapa de bits, que la operación Bitmap Index Scan genera en función de la condición int_col <= 100000000
. Luego, Custom Scan (vector scan)
solo procesa las filas identificadas por este mapa de bits, lo que integra el filtrado directamente en el proceso de análisis de vectores.