Práticas recomendadas de indexação vetorial

Esta página descreve as práticas recomendadas de indexação de vetores que otimizam os seus índices de vetores e melhoram os resultados das consultas de vizinho mais próximo aproximado (ANN).

Ajuste as opções de pesquisa vetorial

Os valores mais ideais para as opções do índice vetorial dependem do seu exemplo de utilização, do conjunto de dados vetoriais e dos vetores de consulta. Pode definir e ajustar estes valores criando um novo índice de vetores e definindo o index_option_list na declaração CREATE VECTOR INDEX. Pode ter de realizar um ajuste iterativo para encontrar os melhores valores para a sua carga de trabalho específica.

Seguem-se algumas diretrizes úteis a seguir quando escolher valores adequados:

  • tree_depth (nível da árvore): se a tabela que está a indexar tiver menos de 10 milhões de linhas, use um tree_depth de 2. Caso contrário, um tree_depth de 3 suporta tabelas com até cerca de 10 mil milhões de linhas.

  • num_leaves: use a raiz quadrada do número de linhas no conjunto de dados. Um valor maior pode aumentar o tempo de criação do índice vetorial. Evite definir num_leaves superior a table_row_count dividido por 1000, uma vez que isto resulta em folhas demasiado pequenas e um desempenho fraco.

  • num_leaves_to_search: esta opção especifica quantos nós folha do índice são pesquisados. Aumentar num_leaves_to_search melhora a capacidade de memorização, mas também aumenta a latência e o custo. Recomendamos a utilização de um número que seja 1% do número total de folhas definido na declaração CREATE VECTOR INDEX como o valor de num_leaves_to_search. Se estiver a usar uma cláusula de filtro, aumente este valor para alargar a pesquisa.

Se alcançar uma capacidade de memorização aceitável, mas o custo da consulta for demasiado elevado, o que resulta num CPS máximo baixo, experimente aumentar num_leaves seguindo estes passos:

  1. Defina num_leaves para algum múltiplo k do respetivo valor original (por exemplo, 2 * sqrt(table_row_count)).
  2. Defina num_leaves_to_search para ser o mesmo múltiplo k do respetivo valor original.
  3. Experimente reduzir o num_leaves_to_search para melhorar o custo e o QPS, mantendo a capacidade de memorização.

Melhore a capacidade de memorização

Para melhorar a capacidade de memorização, considere ajustar o valor num_leaves_to_search ou recriar o índice de vetores.

Se o valor num_leaves_to_search for demasiado pequeno, pode ter mais dificuldade em encontrar os vizinhos mais próximos para alguns vetores de consulta. A criação de um novo índice de vetores com um valor de num_leaves_to_search aumentado pode ajudar a melhorar a capacidade de memorização pesquisando mais folhas. As consultas recentes podem conter mais destes vetores desafiantes.

Reconstrua o índice vetorial

A estrutura de árvore do índice vetorial é otimizada para o conjunto de dados no momento da criação e permanece estática posteriormente. Por conseguinte, se forem adicionados vetores significativamente diferentes após a criação do índice de vetores inicial, a estrutura de árvore pode ser subótima, o que resulta numa capacidade de memorização inferior.

Para reconstruir o índice vetorial sem tempo de inatividade:

  1. Crie um novo índice vetorial na mesma coluna de incorporação que o índice vetorial atual, atualizando os parâmetros (por exemplo, OPTIONS) conforme adequado.
  2. Após a conclusão da criação do índice, use a sugestão FORCE_INDEX para apontar para o novo índice e atualizar a consulta de pesquisa vetorial. Isto garante que a consulta usa o novo índice de vetores. Também pode ter de reajustar num_leaves_to_search na nova consulta.
  3. Elimine o índice de vetores desatualizado.

O que se segue?