Best practice per l'indicizzazione vettoriale

Questa pagina descrive le best practice per l'indicizzazione vettoriale che ottimizzano gli indici vettoriali e migliorano i risultati delle query di ricerca approssimativa del vicino più prossimo (ANN).

Ottimizza le opzioni di ricerca vettoriale

I valori più ottimali per le opzioni dell'indice vettoriale dipendono dal caso d'uso, dal set di dati vettoriali e dai vettori di query. Puoi impostare e ottimizzare questi valori creando un nuovo indice vettoriale e impostando index_option_list nell'istruzione CREATE VECTOR INDEX. Potresti dover eseguire una messa a punto iterativa per trovare i valori migliori per il tuo carico di lavoro specifico.

Ecco alcune linee guida utili da seguire quando scegli i valori appropriati:

  • tree_depth (livello dell'albero): se la tabella che stai indicizzando ha meno di 10 milioni di righe, utilizza un tree_depth di 2. In caso contrario, un tree_depth di 3 supporta tabelle con un massimo di circa 10 miliardi di righe.

  • num_leaves: utilizza la radice quadrata del numero di righe nel set di dati. Un valore maggiore può aumentare il tempo di creazione dell'indice vettoriale. Evita di impostare num_leaves superiore a table_row_count diviso per 1000, in quanto ciò comporta foglie eccessivamente piccole e prestazioni scarse.

  • num_leaves_to_search: questa opzione specifica il numero di nodi foglia dell'indice che vengono cercati. L'aumento di num_leaves_to_search migliora il richiamo, ma aumenta anche la latenza e i costi. Ti consigliamo di utilizzare un numero pari all'1% del numero totale di foglie definito nell'istruzione CREATE VECTOR INDEX come valore per num_leaves_to_search. Se utilizzi una clausola di filtro, aumenta questo valore per ampliare la ricerca.

Se si ottiene un richiamo accettabile, ma il costo delle query è troppo elevato, con conseguente basso QPS massimo, prova ad aumentare num_leaves seguendo questi passaggi:

  1. Imposta num_leaves su un multiplo k del suo valore originale (ad esempio, 2 * sqrt(table_row_count)).
  2. Imposta num_leaves_to_search in modo che sia lo stesso multiplo k del suo valore originale.
  3. Prova a ridurre num_leaves_to_search per migliorare il costo e le QPS mantenendo il richiamo.

Migliorare il ricordo

Per migliorare il richiamo, valuta la possibilità di ottimizzare il valore di num_leaves_to_search o di ricompilare l'indice vettoriale.

Se il valore di num_leaves_to_search è troppo piccolo, potrebbe essere più difficile trovare i vicini più vicini per alcuni vettori di query. La creazione di un nuovo indice vettoriale con un valore num_leaves_to_search maggiore può contribuire a migliorare il richiamo cercando più foglie. Le query recenti potrebbero contenere un numero maggiore di questi vettori difficili.

Ricrea l'indice vettoriale

La struttura ad albero dell'indice vettoriale viene ottimizzata per il set di dati al momento della creazione e rimane statica in seguito. Pertanto, se vengono aggiunti vettori significativamente diversi dopo la creazione dell'indice vettoriale iniziale, la struttura ad albero potrebbe non essere ottimale, con conseguente richiamo peggiore.

Per ricompilare l'indice vettoriale senza tempi di inattività:

  1. Crea un nuovo indice vettoriale nella stessa colonna di incorporamento dell'indice vettoriale attuale, aggiornando i parametri (ad esempio OPTIONS) in base alle esigenze.
  2. Una volta completata la creazione dell'indice, utilizza il suggerimento FORCE_INDEX per indicare il nuovo indice per aggiornare la query di ricerca vettoriale. In questo modo la query utilizza il nuovo indice vettoriale. Potresti anche dover eseguire di nuovo l'ottimizzazione num_leaves_to_search nella nuova query.
  3. Elimina l'indice vettoriale obsoleto.

Passaggi successivi