Ho una tabella con una serie di campi ognuno con un indice FULLTEXT; ho creato anche un indice FULLTEXT per la combinazione di alcuni campi.
Eseguo query di questo tipo:
SELECT campo1, campo2
FROM tabella
WHERE MATCH(campo1) AGAINST ('+parola1' IN BOOLEAN MODE)
AND MATCH(campo2) AGAINST ('+parola2' IN BOOLEAN MODE)
AND MATCH(campo3) AGAINST ('+parola3' IN BOOLEAN MODE)
Ho utilizzato il comando EXPLAIN per capire come MySQL usa gli indici.
- Avendo io creato un indice per ogni campo presente nella query, perché EXPLAIN mi dice che ne viene usato solo uno?
- Non ho capito su che base l'ottimizzatore scelga l'indice da usare in quanto tra i tre indici usa quello meno selettivo!
- Sembra che usi l'indice che a lui pare più adatto in base all'ordine di creazione degli indici; ossia: se creo gli indici nell'ordine su campo1, campo2 e campo3, viene usato l'indice su campo1; se li creo nell'ordine su campo3, campo1 e campo2 viene usato l'indice su campo3 a fronte della medesima query!!
- Tra l'altro, nei vari esempi che ho visto su internet, nelle query c'è sempre una sola clausola MATCH, ma io ho bisogno di metterne di più, sia in AND sia in OR.
Qualcuno sa dirmi qualcosa?

Rispondi quotando