Ce manuel ici est extrêmement peu clair et ne fournit même pas quelques exemples d'instructions SQL: http://dev.mysql.com/doc/refman/5.6/en/column-indexes.html
Une autre façon de reformuler la question est la suivante:
Nous savons que nous pouvons avoir un index avec plusieurs colonnes. Et si les index de ces colonnes sont de type différent? Disons que la première colonne est spatiale, l'autre est fulltextsearch, etc. Pouvons-nous le faire dans mysql? (Bonus: pouvons-nous le faire dans mongodb, si vous le savez)
Dis que tu as une table myisam
Il a une colonne LATLONG qui contient des points
Il a une colonne FULLTEXT qui contient des mots dans le "business"
Vous souhaitez d'abord interroger par LATLONG, puis dans le LATLONG correspondant, vous souhaitez filtrer en fonction de la colonne FULLTEXT.
Je suppose que vous aurez besoin d'un index à plusieurs colonnes.
Mais qu'est-ce que la commande SQL?
Comme nous le savons, mysql utilisera toujours l'index fulltextsearch en premier si possible.
Cette requête:
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
Prend beaucoup de temps, alors que cette requête:
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
est plus rapide car je dis à mysql d'utiliser à la place l'index latlong_2, qui est une requête spatiale.
Eh bien, disons que je veux avoir un index à plusieurs colonnes. Latlong_2 et FULLTEXTSEARCH. Ils sont de type différent. LatLong_2 est spatial et FULLTEXTSEARCH est un index de recherche plein texte. Quelle commande SQL dois-je exécuter?