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 umtree_depth
de2
. Caso contrário, umtree_depth
de3
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 definirnum_leaves
superior atable_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. Aumentarnum_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çãoCREATE VECTOR INDEX
como o valor denum_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:
- Defina
num_leaves
para algum múltiplo k do respetivo valor original (por exemplo,2 * sqrt(table_row_count)
). - Defina
num_leaves_to_search
para ser o mesmo múltiplo k do respetivo valor original. - 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.
Aumentar o valor de num_leaves_to_search
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:
- 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. - 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 reajustarnum_leaves_to_search
na nova consulta. - Elimine o índice de vetores desatualizado.
O que se segue?
Saiba mais sobre os índices vetoriais do Spanner.
Saiba mais acerca dos vizinhos mais próximos aproximados do Spanner.
Saiba mais sobre as funções GoogleSQL
APPROXIMATE_COSINE_DISTANCE()
,APPROXIMATE_EUCLIDEAN_DISTANCE()
eAPPROXIMATE_DOT_PRODUCT()
.Saiba mais acerca das declarações GoogleSQL
VECTOR INDEX
.