Chỉ mục không gian có thể là một phần của chỉ mục nhiều cột không?


8

Đâ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?

Câu trả lời:


3

Không, bạn không thể.

Một chỉ mục, trong MySQL, sẽ là

  • một chỉ số BTREEđơn hoặc nhiều cột.

  • một HASHchỉ mục (chỉ có sẵn cho MEMORYcác bảng), có thể kéo dài một số cột.

  • một SPATIALchỉ mục (chỉ có sẵn cho MyISAMcác bảng).

  • một FULLTEXTchỉ số (có sẵn cho MyISAMvà 5.6.4+ InnoDBbảng), có thể trải ra thành nhiều cột CHAR, VARCHARhoặc TEXTloại.

Bạn không thể kết hợp các loại này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.