>

여기에있는 설명서는 매우 명확하지 않으며 몇 가지 샘플 SQL 문을 제공하지도 않습니다. http://dev.mysql.com/doc/refman/5.6/en/column-indexes.html.

질문을 rephrase하는 또 다른 방법은 다음과 같습니다.

우리는 여러 열이있는 색인을 가질 수 있습니다. 이러한 열의 인덱스가 다른 유형의 경우 어떨까요? 첫 번째 열이 공간적이라고 말하면 다른 하나는 전체 성 텍스트 검색 등입니다. 우리는 MySQL에서 그렇게 할 수 있습니까? (보너스 : 우리는 몽다드에서 그렇게 할 수 있습니다.

당신이 myisam 테이블을 가지고 있다고 가정합니다

포인트가 포함 된 Latlong 열이 있습니다.

비즈니스 "비즈니스"에 단어가 포함 된 전체 텍스트 열이 있습니다.

Latlong 먼저 쿼리를 원한 다음 전체 텍스트 열을 기반으로 필터링하려는 일치하는 Latlong 내에서 쿼리하려고합니다.

여러 개의 열 색인이 필요하다고 가정합니다.

그러나 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이 Spatial 쿼리 인 Latlong_2 인덱스를 대신 Latlong_2 인덱스를 사용하도록 말하기 때문에

가 더 빠릅니다.

여러 개의 열 색인을 원합니다. Latlong_2 및 FullTextSearch. 그들은 다른 유형에서 벗어났습니다. Latlong_2는 공간적이며 FullTextSearch는 전체 텍스트 검색 색인입니다. 어떤 SQL 명령을 실행해야합니까?

관련 자료

  • 이전 mysql - MyISAM 테이블에서 2 천 8 백만 행을 가져 오는 데 얼마나 걸립니까?
  • 다음 mysql - 매우 불안정한 (전력 현명한) 네트워크를위한 최고의 데이터베이스 복제 기술