ここにあるこのマニュアルは非常に不明確であり、いくつかのサンプルSQLステートメントも提供していません。http: //dev.mysql.com/doc/refman/5.6/en/column-indexes.html
質問を言い換える別の方法は次のとおりです。
複数の列を持つインデックスを作成できることはわかっています。それらの列のインデックスが異なるタイプである場合はどうですか?最初の列が空間的で、もう1つが全文検索などであるとします。mysqlでそうすることはできますか?(ボーナス:あなたがたまたま知っていれば、mongodbでそれを行うことができますか?)
myisamテーブルがあるとしましょう
ポイントを含むLATLONG列があります
「ビジネス」の単語を含むFULLTEXT列があります
最初にLATLONGでクエリを実行し、次に一致するLATLONG内でFULLTEXT列に基づいてフィルター処理する必要があります。
複数の列のインデックスが必要になると思います。
しかし、SQLコマンドとは何でしょうか。
私たちが知っているように、mysqlは可能な場合は常に最初にフルテキスト検索インデックスを使用します。
このクエリ:
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
このクエリは長い時間がかかります:
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
代わりに、空間クエリであるlatlong_2インデックスを使用するようにmysqlに指示するため、より高速です。
まあ、私は複数の列のインデックスが欲しいと言います。Latlong_2およびFULLTEXTSEARCH。彼らは別のタイプです。LatLong_2は空間的で、FULLTEXTSEARCHは全文検索インデックスです。どのSQLコマンドを実行する必要がありますか?