Mysql
 sql >> Database >  >> RDS >> Mysql

È possibile avere un indice basato su funzioni in MySQL?

No, non in senso generale, non credo che nemmeno la 5.6 (l'ultima versione quando è stata scritta questa risposta) abbia questa funzionalità. Vale la pena notare che 8.0.13 e versioni successive ora supportano indici funzionali , consentendoti di ottenere ciò di cui hai bisogno senza il metodo di attivazione descritto di seguito.

Se stai eseguendo una versione precedente di mysql , è possibile utilizzare solo il leader parte di una colonna (questa funzionalità esiste da molto tempo), ma non una che inizia dal secondo o dal carattere successivo, o qualsiasi altra funzione più complessa.

Ad esempio, quanto segue crea un indice utilizzando i primi cinque caratteri di un nome:

create index name_first_five on cust_table (name(5));

Per le espressioni più complesse, puoi ottenere un effetto simile avendone un altro colonna con i dati indicizzabili al suo interno, quindi utilizzando i trigger di inserimento/aggiornamento per assicurarsi che sia compilato correttamente.

A parte lo spazio sprecato per i dati ridondanti, è praticamente la stessa cosa.

E, sebbene tecnicamente violi 3NF, ciò è mitigato dall'uso di trigger per mantenere sincronizzati i dati (questo è qualcosa che viene spesso fatto per aumentare le prestazioni).