2010-02-02 5 views
7

우리의 프로젝트는 MySQL 데이터베이스의 INNODB 테이블 내부에서 트리 구조로 세계 데이터베이스를 유지합니다. 지구는 근원, 그 다음 국가, 국가 지역 및 위치는 잎입니다.MySQL 테이블에서 외래 키와 공간 인덱스를 사용하는 방법은 무엇입니까?

외국 키 (지역에 예를 들어 도시를위한) 어린이에 대한 빠른 액세스를 제공하는 데 사용됩니다.

이제 우리는 주어진 좌표에 대한 데이터베이스의 빠른 지리 정보 검색을 구현하려는. 명백한 해결책은 MyISAM 테이블의 기능인 SPATIAL INDEX를 사용하는 것입니다. 그러나 MyISAM 테이블은 외래 키를 지원하지 않습니다. 그리고 INNODB 테이블은 SPATIAL INDEX를 지원하지 않습니다. 우리가 MyISAM 테이블을 사용하는 경우

그래서 우리는 외래 키를 포기해야하고 그 아이들이 너무 오래 검색 할 것입니다.

우리는 어떻게 빨리 아이들이 나무에서 검색 또한 테이블의 공간 인덱스를 결합 할 수 있습니다?

+0

외래 키의 목적은 쿼리 속도를 높이는 것이 아니라 테이블 간의 관계를 강화하는 데 있습니다. 검색 속도를 높이는 것은 외래 키와 함께 생성하는 인덱스입니다. – Benjamin

답변

4

우리는 어떻게 빠른 어린이 검색을 나무에 결합 할 수 있으며 테이블에 SPATIAL INDEX도 가질 수 있습니까?

id 수동으로 테이블의 parentId에 인덱스를 만듭니다 id 대부분의 아마 PRIMARY KEY이기 때문에, 명시 적으로 인덱스가 it (암시 적으로 생성됩니다 일)에 필요하지 않음을

CREATE INDEX ix_mytable_parentid ON mytable (parentid) 

참고.

당신이 자연 지리 기반의 계층 구조가있는 경우

BTW, 검색을위한 부모 - 자식 관계를 사용하는 점은 무엇입니까?

당신은 쿼리는 SPATIAL 인덱스를 사용할 수 있도록 할 수 있습니다 검색을위한 공간 인덱스 및 미세 필터링 관계를 사용합니다

SELECT * 
FROM mytable m1 
JOIN mytable m2 
ON  MBRContains (m2.area, m1.area) 
     AND m2.parentId = m1.id 
WHERE m1.name = 'London' 

합니다.

관련 문제