这里的手册非常不清楚,甚至没有提供一些示例SQL语句:http : //dev.mysql.com/doc/refman/5.6/en/column-indexes.html
重述该问题的另一种方法是:
我们知道我们可以有一个包含多列的索引。如果这些列的索引属于不同类型怎么办?说第一列是空间,另一列是fulltextsearch,等等。我们可以在mysql中这样做吗?(奖金:如果您碰巧知道,我们可以在mongodb中这样做)
假设您有一张myisam桌子
它具有包含点的LATLONG列
它具有FULLTEXT列,其中包含“业务”中的单词
您要先按LATLONG查询,然后在匹配的LATLONG中要基于FULLTEXT列进行过滤。
我想您将需要多列索引。
但是,SQL命令是什么?
众所周知,如果可能的话,mysql将始终首先使用fulltextsearch索引。
该查询:
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
速度更快,因为我告诉mysql使用latlong_2索引代替,这是一个空间查询。
好吧,说我想拥有一个多列索引。Latlong_2和FULLTEXTSEARCH。它们是不同的类型。LatLong_2是空间搜索,而FULLTEXTSEARCH是全文搜索索引。我应该运行什么SQL命令?