A filtragem adaptativa na IA do AlloyDB otimiza as pesquisas vetoriais filtradas selecionando dinamicamente a estratégia de filtragem mais eficiente durante a execução da consulta. Entender como o otimizador de consultas alterna entre a filtragem inline e a pré-filtragem ajuda a projetar consultas vetoriais de alto desempenho sem ajuste manual de índice.
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 pesquisas vetoriais filtradas na 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 alterna de forma automática e 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 momento.
Da filtragem inline à pré-filtragem
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 filtra primeiro um grande conjunto de dados. Se essa pré-filtragem reduzir os candidatos de forma eficaz, o índice vetorial não será usado para a pesquisa final de similaridade vetorial.
Da pré-filtragem à filtragem inline
A filtragem adaptativa também pode alternar 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 vetoriais sem uma etapa de pré-filtragem explícita antes da verificação vetorial. Essa adaptabilidade ajuda a alcançar o desempenho ideal à medida que as distribuições de dados ou os parâmetros de consulta mudam durante o ambiente de 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 busca vetorial usa um filtro de bitmap, que a verificação de índice de bitmap gera com base na condição int_col <= 100000000. O Custom Scan (vector scan) processa apenas as linhas identificadas por esse bitmap, integrando a filtragem diretamente ao processo de verificação de vetor.
Exemplo: como a seletividade aciona uma troca dinâmica
A filtragem adaptativa baseia as decisões na seletividade dos filtros padrão. Se um filtro eliminar uma grande quantidade de dados, é provável que o otimizador escolha a pré-filtragem. Se o filtro deixar a maior parte dos dados intacta, o otimizador provavelmente vai escolher a filtragem inline.
Para observar essa troca dinâmica em tempo real, execute a mesma consulta e
ajuste a seletividade da cláusula WHERE.
Por exemplo, ao consultar uma tabela grande de produtos de varejo, talvez você queira realizar uma pesquisa vetorial apenas em itens abaixo de um preço específico.
Baixa seletividade
Primeiro, você pesquisa produtos abaixo de US $1.000. Como quase todos os produtos no banco de dados custam menos de US $1.000, o filtro tem baixa seletividade. O otimizador de consultas da IA do AlloyDB determina que reunir quase todo o banco de dados em uma lista pré-filtrada é ineficiente, então ele realiza uma verificação vetorial inline.
Se você analisar o plano de consulta, vai notar que o sistema se adaptou dinamicamente ao conjunto de dados massivo e escolheu a filtragem inline.
Limit (actual rows=10)
-> Custom Scan (vector scan)
Execution Strategy: Bitmap assisted vector Scan on scann_idx
Order By: (vec <=> '[...]'::vector)
-> Bitmap Index Scan
Index Cond: (price <= 1000)
Alta seletividade
Em seguida, mude a consulta para pesquisar produtos abaixo de US $10. Quando a consulta começa a ser executada, o otimizador de consultas da IA do AlloyDB se prepara para usar a filtragem inline. O planejador assume incorretamente que o filtro não é muito seletivo. Isso acontece com mais frequência do que o esperado porque as estatísticas usadas para fazer essas estimativas nem sempre são precisas ou atualizadas. No entanto, ele determina rapidamente que o filtro de preço tem alta seletividade: poucos itens no banco de dados têm um preço tão baixo. O otimizador determina que coletar essas poucas linhas antes de realizar a verificação de vetor é muito mais rápido, então ele muda dinamicamente as estratégias para a pré-filtragem.
O plano de consulta reflete essa mudança em tempo real. O sistema optou por pré-filtrar o conjunto de dados pequeno antes de verificar os vetores.
Escolha inicial do planejador
Limit (actual rows=10)
-> Custom Scan (vector scan)
Execution Strategy: Bitmap assisted vector Scan on scann_idx
Order By: (vec <=> '[...]'::vector)
-> Bitmap Index Scan
Index Cond: (price <= 10)
Execução real (interruptor adaptável)
Limit (actual rows=10)
-> Custom Scan (vector scan)
Execution Strategy: Bitmap assisted pre-filtering
Order By: (vec <=> '[...]'::vector)
-> Bitmap Index Scan
Index Cond: (price <= 10)
Não é necessário reescrever o código do aplicativo ou atualizar manualmente os índices do banco de dados à medida que a distribuição de dados muda ao longo do tempo. A IA do AlloyDB lida com a lógica de roteamento para você em cada consulta, garantindo alto desempenho.