인덱스 R-TREE(공간 인덱스)
- 공간 데이터를 저장할 수 있는 데이터타입
- 공간 데이터의 검색을 위한 공간 인덱스(R-Tree 알고리즘)
- 공간 데이터의 연삼 함수(거리 또는 포함 관계의 처리)
mysql>SELECT *FROM tb_location
WHERE ST_Contains(사각상자, px) --// 공간 자표가 Px가 사각 상자에 포함되는지 비교
AND ST_Distance_Sphere(p, px)<=5*1000 /* 5km */
기하학적 도형 정보를 관리 할 수 있는 데이터 타입을 제공합니다.
GEOMENTRY 타입은 나머지 3개 타입의 슈퍼 타입으로, POINT와 LINE,POLYGON 객체를 모두 저장 할 수 있습니다.
MBR(Minimum Bounding Rectagle) 해당도형을 감싸는 최소 크기의 사각형을 의미합니다. 이 사각형들의 포함 관계을 B-Tree 형태로 구현한 인덱스가 R-Tree 인덱스입니다.
R-Tree 인덱스 구조
일반적으로 WGS84(GPS) 기준의 위도, 경도 좌표 저장에 주로 사용됩니다. 하지만 위ㅣ도, 경도 좌표뿐아니라 CAD/CAM 소프트웨어 또는 회로 디자인 등과 같이 좌표 시스템에 기반을 둔 정보에 대해서는 모두 적용할 수 있습니다.
ST_Contain() 또는 ST_Within() 등과 같은 포함 관계를 비교하는 함수로 검색을 수행하는 경우에만 인덱스를 이용할 수 있습니다. '현재 사용자의 위치로부터 반경 5km 이내의 음식점 검색' 등과 같은 검색에 사용할 수 있습니다.
현재 출시된 MySQL에서는 거리를 비교하는 ST_Distance()와 ST_Distance_Sphere() 함수는 공간 인덱스를 효율적으로 사용하지 못하기 때문에 공간 인덱스를 사용할 수 있는 ST_Contains() 또는 ST_Within()을 이용해 거리 기반의 검색을 해야 합니다.
가운데 'P'가 기준점이고, 기준점으로부터 반경 거리 5km이내의 점(위치)들을 검색하려면 우선 사각 점선의 상자에 포함되는(ST_Contains()나 ST_Within()함수 이용)점들을 검색하면 됩니다. 사각형 박스와 같은 다각형으로만 연산 할 수 있으므로 반경 5km를 그리는 원을 포함하는 최소 사각형(MBR)으로 포함 관계 비교를 수행한 것입니다. 점 'P'은 기준점 P로부터 반경 5KM 이상 떨어져 있지만 최소 사각형 내에는 포합됩니다.
--//ST_Contains() 또는 ST_Within()을 이용해 "사각 상자"에 포함된 자표 Px만 검색
mysql>SELECT *FROM tb_location
WHERE ST_Contains(사각상자, px);
mysql>SELECT *FROM tb_location
WHERE ST_Within(px, 사각상자);
두 함수는 비슷하지만 함수 파라미터는 반대로 해야합니다.
mysql>SELECT *FROM tb_location
WHERE ST_Contains(사각상자, px) --//공간 좌표 Px가 사각 상자에 포합되는지 비교
AND ST_Distance_Sphere(p, px)<=5*1000 /* 5km */
P6을 빼고 결과를 조회하려면 조금 더 복잡한 비교가 필요합니다.