Hai espresso la preoccupazione che l'indice su quella colonna sia molto lungo, il che significa che è lo spazio occupato dall'indice, che ti preoccupa.
In una situazione simile su un database Oracle, abbiamo sostituito l'indice normale con uno basato sulla funzione, prendendo i primi 20 caratteri del valore della colonna: abbiamo indicizzato SUBSTR20 (COLUMN) invece di COLUMN, con SUBSTR20 come utente- funzione definita.
Questo ha notevolmente aiutato a ridurre la dimensione dell'indice, ma abbiamo dovuto riscrivere tutte le query in
WHERE
SUBSTR20(COLUMN) = SUBSTR20('abcdefghijklmnopqrstuvwxyz')
AND
COLUMN = 'abcdefghijklmnopqrstuvwxyz'
per fare in modo che il database utilizzi l'indice (prima parte) e controlli i risultati anche per la corrispondenza dei caratteri rimanenti (seconda parte).
E gestire correttamente i confronti LIKE è diventato una sfida non banale.
Le prestazioni delle query che abbiamo riscontrato erano buone (paragonabili all'indice a colonna intera), poiché la selezione principale è stata effettuata dall'indice di sottostringa.
Quindi, questa soluzione riduce il consumo di spazio, ma arriva al costo di query SQL più complesse.
Naturalmente, il presupposto è che i primi 20 caratteri siano abbastanza significativi da ridurre il risultato impostato a pochi candidati (il che era vero nel nostro caso).
Per generalizzare questo approccio, sei naturalmente libero di fare ciò che vuoi nella funzione di indicizzazione, ad es. calcola qualche valore di hash.