안녕하세요. 아래와 같은 도로명주소 테이블이 있습니다.(안전행정부 제공 자료로 만든 테이블입니다.)
예)
우편번호 | 시도 | 시군구 | 동 | 도로명 | 건물주번 | 건물부번 |건물명 | 리 | 지번주번 | 지번부번(번지)
--------------------------------------------------------------------------------------------------
110062 서울특별시 종로구 신문로2가 경희궁1가길 11 아산정책연구소 1-176
110062 서울특별시 종로구 신문로2가 경희궁1가길 11-6 경희궁파크 1-178
110062 서울특별시 종로구 신문로2가 경희궁1가길 15 1-175
110062 서울특별시 종로구 신문로2가 경희궁1가길 16 1-320
110062 서울특별시 종로구 신문로2가 경희궁1가길 17 1-174
110062 서울특별시 종로구 신문로2가 경희궁1가길 17-1 1-217
110062 서울특별시 종로구 신문로2가 경희궁1가길 17-2 1-172
110062 서울특별시 종로구 신문로2가 경희궁1가길 18 1-173
110062 서울특별시 종로구 신문로2가 경희궁1가길 19 1-348
110062 서울특별시 종로구 신문로2가 경희궁1가길 19-1 1-171
110062 서울특별시 종로구 신문로2가 경희궁1가길 20 1-203
110062 서울특별시 종로구 신문로2가 경희궁1가길 22 1-75
110062 서울특별시 종로구 신문로2가 경희궁1가길 3 1-183
:
:
www.juso.go.kr 도로명 주소 검색사이트 검색창을 보면
도로명주소를 입력을 해도, 지번주소를 입력을 해도 빠른 속도로 검색이 되어 나오는데,
사용자가 입력값이 어떤컬럼인지 따지지 않는걸로 봐선 모든 컬럼을 합한 컬럼에 like 를 쓴거라 생각했는데
막상 해보니, 원하는 속도가 나오지 않내요.
제 경우는
예) '종로구' 로 조회, -> 합친 컬럼 like '%' \ '종로구' || '%'
'종로구 사직동' 으로 조회 -> 합친 컬럼 like '%' \'종로구' || '%' or 합친컬럼 like '%' || '사직동' || '%'
'사직동 336-1' 번지로 조회 -> 합친 컬럼 like '%' ||'사직동'|| '%' or 합친컬럼 like '336-1'|| '%'
뭘로 검색를 해도 속도가 잘 나오게 하려고 하는데. 인덱스 말고 select 문을 어떻게 해야 할까요?
고수님들의 고견 부탁드립니다.
추가)
select *
from
(select /*+ parallel(주소테이블) */
*
from 주소테이블 where 조건1 is not null and 합친컬럼 like '%'||'조건1'||'%'
union all
select /*+ parallel (주소테이블) */
*
from 주소테이블 where 조건2 is not null and 합친컬럼 like '%'||'조건2'||'%'
union all
select /*+ parallel(주소테이블) */
*
from 주소테이블 where 조건3 is not null and 합친컬럼 like '%'||'조건3'||'%'
)
where rownum <= 10000;
현재 plan 보면서 튜닝한 수준입니다. 고견 부탁드립니다.
|