store_latitude(위도 필드명) , store_longitude(경도 필드명) SELECT (6371*acos(cos(radians(37.7117084))*cos(radians(store_latitude))*cos(radians(store_longitude) -radians(126.4498920999)) +sin(radians(37.7117084))*sin(radians(store_latitude)))) AS store_distance
이런식으로 위도와 경도 필드값을 받아와서 계산하는 계산식이 있는데용.. SELECT 할때 해당 조건을 처리해서 store_distance 라는 임시의 필드명을 주고
그 값을 땡겨씁니다.. 문제는 store_distance <-- 이넘이 Order by 조건으로 무조건 들어가야되는데.. 만들어낸 값이다 보니까 index를 태울수가 없어서
얘만 들어갔다 하면 검색결과가 0.015초에서 1.5초로 바껴버립니다..ㅠㅠ 어떻게 하면 빠른속도 검색을 낼수 있을까요..선배님들 조언 부탁드립니다..!!
조회조건으로 입력되는 위도와 경도를 중심으로 해서
좌우 상하로 50 미터 씩 늘린 정사각형을 만듭니다.
해당 정사각형 안에 들어가는 자료가 존재하는지 체크합니다.(위도 + 경도 인덱스 필요)
WHERE store_distance <= 50M
AND 위도 BETWEEN :v_위도 - 50M AND :v_위도 + 50M
AND 경도 BETWEEN :v_경도 - 50M AND :v_경도 + 50M
존재하면 정렬해서 결과 리턴해 주고요
존재하지 않으면 조회 범위를 늘립니다. 100M
100M 도 없으면 300M > 500M > 1KM 식으로...
검색 자료가 나올 때까지 범위를 늘려가며 검색하세요.