Dieses Handbuch hier ist äußerst unklar und enthält nicht einmal einige SQL-Beispielanweisungen: http://dev.mysql.com/doc/refman/5.6/en/column-indexes.html
Eine andere Möglichkeit, die Frage neu zu formulieren, ist die folgende:
Wir wissen, dass wir einen Index mit mehreren Spalten haben können. Was ist, wenn die Indizes dieser Spalten unterschiedlichen Typs sind? Angenommen, die erste Spalte ist räumlich, die andere ist Volltextsuche usw. Können wir dies in MySQL tun? (Bonus: Können wir das in Mongodb tun, wenn Sie es wissen?)
Angenommen, Sie haben einen Myisam-Tisch
Es hat eine LATLONG-Spalte, die Punkte enthält
Es hat eine FULLTEXT-Spalte, die Wörter im "Geschäft" enthält.
Sie möchten zuerst nach LATLONG abfragen und dann innerhalb des passenden LATLONG nach der Spalte FULLTEXT filtern.
Ich nehme an, Sie benötigen einen mehrspaltigen Index.
Aber was ist der SQL-Befehl?
Wie wir wissen, verwendet MySQL nach Möglichkeit immer zuerst den Volltextsuchindex.
Diese Abfrage:
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
Dauert lange, während diese Abfrage:
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
ist schneller, weil ich mysql anweise, stattdessen den latlong_2-Index zu verwenden, bei dem es sich um eine räumliche Abfrage handelt.
Angenommen, ich möchte einen mehrspaltigen Index haben. Latlong_2 und FULLTEXTSEARCH. Sie sind von unterschiedlichem Typ. LatLong_2 ist räumlich und FULLTEXTSEARCH ist ein Volltextsuchindex. Welchen SQL-Befehl sollte ich ausführen?