2012-03-29 1 views
1

나는 각 행에 Point (위도와 경도)가 포함 된 ~ 40k 행의 샘플 세트를 포함하는 테이블을 가지고있다. MySQL의 공간 확장을 사용하여 경계 내에있는 점을 찾습니다.MySQL에서 가능한 인덱스를 사용하지 않습니다 - 왜?

결과가 거의 없다는 것을 알고있는 경계에서 검색하면 인덱스가 그대로 사용됩니다. 그러나 테스트 데이터 세트는 주로 영국 주변 지역으로 구성됩니다 (더 큰 실제 데이터 세트는 백분율로 비슷합니다). 나는이 경계 상자 내에서 검색 할 때 인덱스가 사용하지 않는 대신 전체 테이블 스캔이 수행됩니다 : MySQL은 행의 수는 예상 할 때 인덱스를 무시하는 결정하는 것처럼

id select_type  table type possible_keys  key key_len  ref  rows Extra 
1 SIMPLE   ep  ALL  PRIMARY,location NULL NULL  NULL 37221 Using where 

그래서 보인다 찾을 수있는 총 행 수에 가깝습니다.

이 경우이 경우 색인을 강제로 사용하거나 그렇지 않으면 전체 테이블 스캔을 피할 수 있습니까?

+1

질문하기 예상 할 수있는 결과는 많은 결과를 얻을 수 있다는 것입니다. 이 경우 필요하지 않기 때문에 많은 결과를 반환하기 위해 인덱스를 탐색해야합니다. –

+0

또한'table_structure'를 게시 할 수 있다면 좋을 것입니다. –

답변

0

N.B가 정확했기 때문에 LIMIT을 아래쪽으로 조정하면 색인이 사용된다는 의미입니다. 분명히.

+0

LIMIT 절에 속지 마십시오. 아무 것도 사용되지 않습니다. LIMIT OFFSET은 결과를 가져온 다음 OFFSET 항목 수를 버립니다. MyISAM 테이블을 사용하는 경우 "늦은 행 조회"를 위해 google을 사용하고 그에 따라 검색어를 조정하십시오. –