--area_code_all이라는 테이블과 POI라는 테이블이 있습니다.
--POI에서 사용자가 선택한 값과 가장 근사치를 찾아서 L_CODE를
구하고 그 값으로
--area_code_all의 L_CODE와 비교하여 같은 레코드의 do, si, dong을
구할라고 합니다.
--(POI에서 전체 검색하면 넘 느려서 범위를 주었습니다.
between으로)...
--그리고 POI에서 가장 근사치의 L_CODE로 선택된 레코드에서
name값도 뽑아오면 완료~! BUT~!!!
--(1) 도 시 동만 출력하기, 응답시간 빠릅니다. 100ms미만
select do,si,dong from area_code_all where l_code =
(select L_CODE FROM
(SELECT NAME, H_CODE, L_CODE, KATX, KATY FROM POI WHERE KATX
BETWEEN 325779.76-500 AND 325779.76+500 AND KATY BETWEEN
537096.13-500 AND 537096.13+500)b
WHERE ( ABS(b.katx - 325779.76) + ABS(b.katy - 537096.13)) =
(SELECT MIN( ABS(katx - 325779.76) + ABS(katy - 537096.13) )
FROM
(SELECT NAME, H_CODE, L_CODE, KATX, KATY FROM POI WHERE KATX
BETWEEN 325779.76-500 AND 325779.76+500 AND KATY BETWEEN
537096.13-500 AND 537096.13+500)));
--(2) (1)번과 같다고 생각되는데 응답시간이 없청 느립니다.
20초안팍
select a.do,a.si,a.dong from area_code_all a,
(select L_CODE, NAME FROM
(SELECT NAME, H_CODE, L_CODE, KATX, KATY FROM POI WHERE KATX
BETWEEN 325779.76-500 AND 325779.76+500 AND KATY BETWEEN
537096.13-500 AND 537096.13+500)b
WHERE ( ABS(b.katx - 325779.76) + ABS(b.katy - 537096.13)) =
(SELECT MIN( ABS(katx - 325779.76) + ABS(katy - 537096.13) )
FROM
(SELECT NAME, H_CODE, L_CODE, KATX, KATY FROM POI WHERE KATX
BETWEEN 325779.76-500 AND 325779.76+500 AND KATY BETWEEN
537096.13-500 AND 537096.13+500)))c
where a.l_code = c.l_code;
--(3) 원래 원하는 값입니다. area_code_all의 도 시 동값과 poi의
name까지... 당근 응답시간 엄청 느립니다. 20초 초과
select a.do,a.si,a.dong,c.name from area_code_all a,
(select L_CODE, NAME FROM
(SELECT NAME, H_CODE, L_CODE, KATX, KATY FROM POI WHERE KATX
BETWEEN 325779.76-500 AND 325779.76+500 AND KATY BETWEEN
537096.13-500 AND 537096.13+500)b
WHERE ( ABS(b.katx - 325779.76) + ABS(b.katy - 537096.13)) =
(SELECT MIN( ABS(katx - 325779.76) + ABS(katy - 537096.13) )
FROM
(SELECT NAME, H_CODE, L_CODE, KATX, KATY FROM POI WHERE KATX
BETWEEN 325779.76-500 AND 325779.76+500 AND KATY BETWEEN
537096.13-500 AND 537096.13+500)))c
where a.l_code = c.l_code;
--[질문1] (2)이 왜 느린지 답변부탁드립니다. 제가보기엔 (1)번과
같아보이는데... =ㅂ=;;
--[질문2] (3)번을 빠르게 하는 방법 없을까요?
-- 고수님들의 우문현답 부탁드립니다. 그럼 좋은 하루 되시길~
|