Nesta página, você encontra uma visão geral conceitual da filtragem adaptativa na AlloyDB AI, um recurso projetado para otimizar pesquisas vetoriais filtradas.
O que é a filtragem adaptativa?
A filtragem adaptativa analisa padrões de consulta e distribuições de dados durante a execução da consulta para escolher dinamicamente a estratégia de filtragem mais eficiente, como filtragem inline ou pré-filtragem.
O otimizador de consultas da IA do AlloyDB usa a análise baseada em custos para determinar se a filtragem inline ou a pré-filtragem oferece o melhor desempenho em qualquer ponto durante a execução da consulta.
Esse tipo de otimização é compatível com as pesquisas vetoriais filtradas da IA do AlloyDB, em que a filtragem adaptativa alterna automaticamente entre o uso de vetores e índices de metadados, o que produz resultados eficientes e precisos sem intervenção manual.
Alternância dinâmica entre estratégias de filtragem
A filtragem adaptativa muda automaticamente e de forma dinâmica entre as estratégias de filtragem inline e pré-filtragem durante a execução da consulta com base em padrões de consulta e distribuições de dados em tempo real. O otimizador de consultas da IA do AlloyDB usa a análise baseada em custos para determinar qual estratégia oferece o melhor desempenho em qualquer ponto.
Do inline ao pré-filtro
Quando o otimizador determina que a pré-filtragem é mais eficiente, a filtragem adaptativa aciona uma mudança da filtragem inline para a pré-filtragem durante a execução. O plano de consulta muda dinamicamente para refletir isso.
Por exemplo, o plano pode mostrar Bitmap assisted pre-filtering
no campo Estratégia de Execução quando o otimizador determina que a pré-filtragem é mais eficiente naquele ponto da consulta. Essa alteração dinâmica ocorre à medida que o sistema se adapta aos dados reais encontrados durante a execução da consulta.
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)
Ao usar Execution Strategy: Bitmap assisted pre-filtering
, um Bitmap Index Scan
separado primeiro filtra um grande conjunto de dados. Se essa pré-filtragem reduzir os candidatos de forma eficaz, o índice de vetor não será usado na pesquisa final de similaridade de vetor.
Da pré-filtragem à filtragem inline
A filtragem adaptativa também pode mudar dinamicamente da pré-filtragem para a filtragem inline se o otimizador de consultas da IA do AlloyDB determinar que a filtragem inline é mais eficiente para as características da consulta atual.
Nesses casos, o plano de consulta se ajusta dinamicamente para refletir um processamento mais direto dos dados de vetor sem uma etapa explícita de pré-filtragem antes da verificação do vetor. Essa adaptabilidade ajuda a alcançar o desempenho ideal à medida que as distribuições de dados ou os parâmetros de consulta mudam durante a execução.
Por exemplo, o plano de consulta mostra vector scan
no campo Estratégia de execução quando o otimizador determina que uma estratégia de filtragem inline é mais eficiente para a consulta em questão.
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)
Neste exemplo, o Execution Strategy
mostra Bitmap assisted vector Scan on scann_idx
, com um Bitmap Index Scan
subjacente em btree_idx
. Isso indica que a pesquisa de vetor usa um filtro de bitmap, que a verificação de índice de bitmap gera com base na condição int_col <= 100000000
. Em seguida, o Custom Scan (vector scan)
processa apenas as linhas identificadas por esse bitmap, integrando a filtragem diretamente ao processo de verificação de vetor.