Đây thủ công ở đây là rất rõ ràng và thậm chí không cung cấp một số câu lệnh SQL mẫu: http://dev.mysql.com/doc/refman/5.6/en/column-indexes.html
Một cách khác để viết lại câu hỏi là như sau:
Chúng tôi biết rằng chúng tôi có thể có một chỉ mục với nhiều cột. Còn nếu các chỉ mục của các cột đó thuộc loại khác nhau thì sao? Giả sử cột đầu tiên là không gian, cột còn lại là fulltextsearch, v.v. Chúng ta có thể làm như vậy trong mysql không? (Phần thưởng: chúng ta có thể làm như vậy trong mongodb, nếu bạn tình cờ biết)
Nói rằng bạn có một bàn myisam
Nó có một cột LATLONG có chứa các điểm
Nó có một cột FULLTEXT có chứa các từ trong "doanh nghiệp"
Bạn muốn truy vấn bằng LATLONG trước, và sau đó trong LATLONG phù hợp bạn muốn lọc dựa trên cột FULLTEXT.
Tôi cho rằng bạn sẽ cần nhiều chỉ số cột.
Nhưng lệnh SQL là gì?
Như chúng ta đã biết, mysql sẽ luôn sử dụng chỉ mục fulltextsearch trước nếu có thể.
Truy vấn này:
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
Mất một thời gian dài, trong khi truy vấn này:
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
thay vì nhanh hơn vì tôi bảo mysql sử dụng chỉ mục latlong_2 thay vào đó là truy vấn không gian.
Vâng, nói rằng tôi muốn có một chỉ số nhiều cột. Latlong_2 và FULLTEXTSEARCH. Họ là loại khác nhau. LatLong_2 là không gian và FULLTEXTSEARCH là một chỉ mục tìm kiếm toàn văn bản. Tôi nên chạy lệnh SQL nào?