database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40305 게시물 읽기
No. 40305
도로명 주소 관련 인덱스 생성
작성자
곽동엽(kwakdong)
작성일
2013-11-08 14:18ⓒ
2013-11-08 14:47ⓜ
조회수
10,937

 

안녕하세요. 아래와 같은 도로명주소 테이블이 있습니다.(안전행정부 제공 자료로 만든 테이블입니다.)

 

예)

우편번호 | 시도          | 시군구   | 동                 | 도로명     | 건물주번 | 건물부번 |건물명  | 리 | 지번주번 | 지번부번(번지)

--------------------------------------------------------------------------------------------------

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 보면서 튜닝한 수준입니다. 고견 부탁드립니다.

 

이 글에 대한 댓글이 총 1건 있습니다.

검색조건별로 인덱스를 만들고 Hint 를 명시하는 방법입니다.

그리고 like 는 뒤쪽만 허용하는 것도 좋습니다.

우편번호가 자주 사용된다면, buffer keep 하는 것도 있습니다.

juso.go.kr 은  검색엔진으로 인덱싱화 사용하기 때문에 db에서 직접 조회하는 방법과 다릅니다.

 

select /*+ index(a ix동) */     ..

   ..

from tab

where 1=1

and 동 like '동%'

union all

select /*+ index(a ix도로) */     ..

from tab

where 1=1

and 도로 like '도로%'

union all

select /*+ index(a x건물) */     ..

from tab

where 1=1

and 건물 like '건물%'

 

tohappy(tohappy)님이 2013-11-08 17:18에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40308쿼리문의 조건문이 너무 지저분한것 같은데 봐주세요 ㅜㅜ [1]
쌈창
2013-11-11
6077
40307이런것도 쿼리로 가능할까요? ㅠㅠ [2]
햇살한조각
2013-11-08
6534
40306UUID 생성 [1]
구박덩어리
2013-11-08
7472
40305도로명 주소 관련 인덱스 생성 [1]
곽동엽
2013-11-08
10937
40304CONNECT BY 쿼리문 좀 도와주세요 [6]
김정훈
2013-11-07
6607
40303dmp파일 CMD창에서 import할때... [2]
한상원
2013-11-07
5754
40302프로시저로 되어있는것 쿼리 추출할수 있을까요? [3]
궁금이
2013-11-06
6608
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다