Questo manuale qui è estremamente poco chiaro e non fornisce nemmeno alcune istruzioni SQL di esempio: http://dev.mysql.com/doc/refman/5.6/en/column-indexes.html
Un altro modo per riformulare la domanda è il seguente:
Sappiamo di poter avere un indice con più colonne. Che dire se gli indici di quelle colonne sono di tipo diverso? Supponiamo che la prima colonna sia spaziale, l'altra sia fulltextsearch, ecc. Possiamo farlo in mysql? (Bonus: possiamo farlo in mongodb, se ti capita di saperlo)
Supponi di avere un tavolo myisam
Ha una colonna LATLONG che contiene punti
Ha una colonna FULLTEXT che contiene parole nel "business"
Prima si desidera eseguire una query per LATLONG, quindi all'interno della LATLONG corrispondente si desidera filtrare in base alla colonna FULLTEXT.
Suppongo che avrai bisogno di più indici di colonna.
Ma cos'è il comando SQL?
Come sappiamo, mysql utilizzerà sempre prima l'indice fulltextsearch, se possibile.
Questa query:
SELECT BusinessID as ID ,
111151.29341326*SQRT(pow(-6.186751-X(LatLong),2)+pow(106.772835-Y(LatLong),2)*0.98838574205337) AS Distance from tableauxiliary
use index (LatLong_2)
WHERE
MBRContains(
GeomFromText (
'MULTIPOINT(-6.1934985598076 106.76604791159,-6.1800034401924 106.77962208841)'
),
Latlong)=1
AND Prominent >15
AND MATCH FullTextSearch AGAINST ('sea*' IN BOOLEAN MODE)
ORDER BY
Distance
LIMIT
0, 45
Richiede molto tempo, mentre questa query:
SELECT BusinessID as ID ,
111151.29341326*SQRT(pow(-6.186751-X(LatLong),2)+pow(106.772835-Y(LatLong),2)*0.98838574205337) AS Distance from tableauxiliary
use index (LatLong_2)
WHERE
MBRContains(
GeomFromText (
'MULTIPOINT(-6.1934985598076 106.76604791159,-6.1800034401924 106.77962208841)'
),
Latlong)=1
AND Prominent >15
AND MATCH FullTextSearch AGAINST ('sea*' IN BOOLEAN MODE)
ORDER BY
Distance
LIMIT
0, 45
è più veloce perché dico a mysql di usare invece l'indice latlong_2, che è una query spaziale.
Bene, dire che voglio avere un indice a più colonne. Latlong_2 e FULLTEXTSEARCH. Sono di diverso tipo. LatLong_2 è spaziale e FULLTEXTSEARCH è un indice di ricerca full-text. Quale comando SQL dovrei eseguire?