ST_Contains()
또는 ST_Within()
등ST_Distance()
와 ST_Distance_Sphere()
함수는 공간 인덱스를 효율적으로 사용하지 못한다.ST_Contains()
또는 ST_Within()
를 이용해 거리 기반의 검색을 해야 한다.ST_Contains()
또는 ST_Within()
연산은 사각형 박스와 같은 다각형(Polygon)으로만 연산할 수 있다.ST_Contains()
또는 ST_Within()
함수를 이용하여 반경 5km를 그리는 원을 포함하는 최소 사각형(MBR)으로 포함 관계 비교를 수행
SELECT * FROM tb_location WHERE ST_Contains(사각 상자, px);
SELECT * FROM tb_location WHERE ST_Within(px, 사각 상자);
이때, 사각형 안에 있지만 원 밖에 있는 점을 제거하고 싶다면 ST_Contains()
비교의 결과에 대해 ST_Distance_Sphere()
함수를 이용해 다시 한 번 필터링 해야 한다.
SELECT * FROM tb_location
WHERE ST_Contains(사각 상자, px) -- // 공간 좌표 px가 사각 상자에 포함되는지 비교
AND ST_Distance_Sphere(p, px) <= 5*1000 -- // 5km