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 38831 게시물 읽기
No. 38831
[28396번 검색 속도 문제 입니다] 에 대한 추가 질문입니다.
작성자
최진규(cjg1012)
작성일
2011-08-30 17:40ⓒ
2011-08-30 17:49ⓜ
조회수
4,382

몇일전에 질문을 올렸는데
박광일님께서 성심껏 테스트가지 해가며 답을 해주셨습니다. (감사합니다.)
http://database.sarang.net/?criteria=oracle&subcrit=qna&inc=read&aid=38816
 

하지만 도통 이해가 되질 않아서 다시 질문올립니다.
박광일님 말씀은 비정형으로 데이터가들어가는 칼럼을 하나 만들어서
그 컬럼을 인덱스를 사용하면 된다고 했는데..
도통 이부분이 무슨 말씀인지를 이해를 못하겠어요..ㅜㅜ
 

문제는
SELECT T1.*
  FROM (
    SELECT
         A, B, C, 사용자정의함수(~~) AS D
    FROM TABLE
) T1
WHERE T1.D > 0 AND T2.D < 99
ORDER BY T1.D

대략 이런종류에 쿼리에서 저기 밑줄친 부분때문에 검색속도가 너무 느린건데요..
그래서 박광님 조언되로 D라는 컬럼을 만들어 인덱스를 만들었는데..
TABLE에서 생성한 D와 위 쿼리에서 alias로 된 D라는 칼럼은 다른거 아닌가 싶은데요..
그래서 전혀 다른 컬럼이라서 D칼러의 인덱스와는 별개 같은데요...


제가 잘못 이해 하고 있는거 같습니다.
어떤의미인지요??

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

지나가다 댓글남겨봅니다.

지난번 글을 보면 사용자 정의함수에 들어가는 파라미터 뒤에 2개는 입력값인거같은데

그렇다면 함수결과로서 비정형데이터 컬럼을 만들수 없을거같네요..

함수결과값이 조건절로 걸리며 그에 따른 소팅을 해야 하는 상황이라면 딱히 해결방법은 없어보이며

ORDER BY 절을 빼고 App 단에서 정렬을 할수밖에 없어보이네요.

해당테이블은 항상 풀스캔이 발생할수 밖에 없으므로 parallel 을 이용하여 조금이나마

속도향상을 볼수밖에 없어 보이네요..

1님이 2011-08-31 11:04에 작성한 댓글입니다. Edit

음..제 답글도 한번 검토해 봐주세요.

함수기반 인덱스는 함수 사용시 입력값이 변하므로 사용 안될것이고.

최대한 함수 사용을 줄이는 방법을 제안 했었는데요...

마농(manon94)님이 2011-08-31 11:26에 작성한 댓글입니다.

마농님 댓글에서 착안하여 함수의 인자로 넘기는 좌표값으로 먼저 계산을 하여 계산된 좌료를 가지고 찾는 방법을 해야겠네요..
검색조건이 최소 1km~90km라고 하면 인자로 넘기는 좌표값에서 +-1에 해당되는 좌표와 +-90에 해당되는 좌표를 구해서 좌표를 조회조건으로 하면 될거 같습니다.
근데 쟁점은 현재 나의 좌표 예를들어 경도,위도에서 -1km에 해당되는 좌표들이 무조건 작은값이 나오는지가 문제내요..좀더 찾아봐야겠습니다.

최진규(cjg1012)님이 2011-08-31 14:13에 작성한 댓글입니다.

 CALC_DISTANCE(A.LATITUDE, A.LONGITUDE, TO_NUMBER('37.627072325'), TO_NUMBER('127.0333922')) DISTANCE_NUMBER --거리구하는 사용자함수사용
FROM MT_MEMBER A.....

-- A.LATITUDE, A.LONGITUDE 는 회원의 정보로 등록시점에 알수 있고,

-- TO_NUMBER('37.627072325'), TO_NUMBER('127.0333922') 는 상수로 판단함.

이럴 경우 MT_MEMBER 등록 수정 시 DISTANCE_NUMBER(계산이 완료된 값) 를 입력해 두자는 의미입니다. 

그러나,  Fun 에서 3,4번째 args가 바인드 변수라면 다른 이야기가 되겠죠.

 

 

 

 

 

.

 

 

박광일(tohappy)님이 2011-08-31 17:19에 작성한 댓글입니다.

abs(v - :x) < 99 and abs(h - :x) < 99

and 

abs(v - :y) < 99 and abs(h - :y) < 99

 

위의 연산에 추가로 거리구하는 연산을 해야된다고 하면

저같으면 거리구하는 연산 한번만 하겠습니다.

추가작업하는게 더 비효율적인거같네요..

 

1님이 2011-09-01 14:41에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
38834고수님들께 Query 질문 드립니다. [2]
김창기
2011-09-01
4253
38833병렬 쿼리시 너무 느립니다. [1]
슬라임
2011-09-01
3599
38832mview 생성 안될때
박주영
2011-08-31
3450
38831[28396번 검색 속도 문제 입니다] 에 대한 추가 질문입니다. [5]
최진규
2011-08-30
4382
38830sql developer 로드취소? [3]
전상도
2011-08-30
4745
38829group by 질문입니다. [3]
박대웅
2011-08-29
3763
38828sqlldr 실행시 중복된 행이 있을경우 옵션? [1]
김용남
2011-08-29
4553
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다