MySql: Velocizzare le ricerche con indici Full Text
| settembre 28th, 2009I database crescono, le richieste aumentano, e le query che fino a poco tempo fa sembravano veloci diventano improvvisamente lentissime… Prima o poi tutti si riconoscono in questa situazione… e se non si corre ai ripari si rischia seriamente di compromettere un intero sistema.
Per quanto mi riguarda ci sono passato parecchie volte in una situazione analoga ma l’ultima volta la questione era un po’ più complicata delle precedenti e analizzando (.?..x~@~#..!.) l’sql ho localizzato i colli di bottiglia della query incriminata e alla fine ho deciso di creare un indice di tipo Full Text per velocizzare il recupero dei dati.
Ragazzi, non avevo mai utilizzato indici Full Text ma sono rimasto impressionato dalla velocità, un query che normalmente impiega dai 3 ai 7 secondi adesso viene eseguita in pochi centesimi di secondo!
Per chi non sapesse cos’è e come si usa un indice Full Text ecco un po’ di appunti:
L’ indice Full Text è un indice speciale in grado di recuperare la posizione di ogni distinto vocabolo in un campo.
In un indice Full Text possono essere indicizzati uno o più campi testuali (varchar, text, ecc…).
Sintassi di creazione dell’indice:
1 | ALTER TABLE NomeTabella ADD FULLTEXT (nome_campo); |
Sintassi di creazione dell’indice con più campi:
1 | ALTER TABLE NomeTabella ADD FULLTEXT (nome_campo,nome_campo2); |
Sintassi di utilizzo:
1 | SELECT * FROM NomeTabella WHERE MATCH (nome_campo) AGAINST ('parola_da_cercare'); |
Sintassi di utilizzo con più campi nell’indice:
1 | SELECT * FROM NomeTabella WHERE MATCH (nome_campo,nome_campo2) AGAINST ('parola_da_cercare'); |
