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 regolazione 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 untree_depthdi2. In caso contrario, untree_depthdi3supporta 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 impostarenum_leavessuperiore atable_row_countdiviso 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 dinum_leaves_to_searchmigliora 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'istruzioneCREATE VECTOR INDEXcome valore pernum_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:
- Imposta
num_leavessu un multiplo k del suo valore originale (ad esempio,2 * sqrt(table_row_count)). - Imposta
num_leaves_to_searchin modo che sia lo stesso multiplo k del suo valore originale. - Prova a ridurre
num_leaves_to_searchper migliorare il costo e le QPS mantenendo il richiamo.
Migliorare il richiamo
Per migliorare il richiamo, valuta la possibilità di modificare il valore di num_leaves_to_search o
di ricompilare l'indice vettoriale.
Aumenta il valore di num_leaves_to_search
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 ed è 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 inferiore.
Per ricreare l'indice vettoriale senza tempi di inattività:
- Crea un nuovo indice vettoriale nella stessa colonna di incorporamento dell'indice vettoriale attuale, aggiornando i parametri (ad esempio
OPTIONS) in modo appropriato. Al termine della creazione dell'indice, potresti valutare quale dei due indici ha un rendimento migliore. In questo caso, procedi al passaggio successivo. In caso contrario, procedi all'eliminazione dell'indice vettoriale obsoleto. Spanner decide automaticamente quale indice utilizzare nell'esecuzione della query. Spanner offre due modi per specificare l'indice da utilizzare. Scegli uno dei seguenti metodi per valutare e confrontare gli indici:
a. Modifica l'applicazione: puoi aggiornare un sottoinsieme delle query in modo che utilizzino il suggerimento
FORCE_INDEXper puntare al nuovo indice e aggiornare la query di ricerca vettoriale. In questo modo la query utilizza il nuovo indice vettoriale. Se utilizzi questo metodo, potresti dover modificarenum_leaves_to_searchnella nuova query.b. Modifica lo schema: puoi impostare l'opzione
disable_searchsu uno degli indici vettoriali. Se impostato sutrue, Spanner disattiva l'indice vettoriale. Puoi farlo eseguendo l'istruzione di modifica dello schemaALTER VECTOR INDEX:ALTER VECTOR INDEX IncidentVectorIndex SET OPTIONS (disable_search=true);Questo metodo impedisce a Spanner di utilizzare questo indice vettoriale nel tuo database. Se hai due indici e imposti questa opzione su quello meno recente, tutte le query utilizzano il nuovo indice dopo l'applicazione della modifica dello schema. Se utilizzi il suggerimento
FORCE_INDEXper specificare un indice vettoriale con l'opzionedisable_searchimpostata sutrue, la query non va a buon fine.Elimina l'indice vettoriale obsoleto.
Passaggi successivi
Scopri di più sugli indici vettoriali di Spanner.
Scopri di più sugli approximate nearest neighbors di Spanner.
Scopri di più sulle funzioni GoogleSQL
APPROXIMATE_COSINE_DISTANCE(),APPROXIMATE_EUCLIDEAN_DISTANCE(),APPROXIMATE_DOT_PRODUCT().Scopri di più sulle istruzioni
VECTOR INDEXGoogleSQL.