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 39369 게시물 읽기
No. 39369
반복되는 INLINEVIEW 성격의 쿼리를 WITH로 빼는게 성능에 좋을까요?
작성자
초짜
작성일
2012-03-29 12:29
조회수
4,019

안녕하세요.

사이즈가 제법큰 이력 테이블에서 ID 정보를 추출하여, 다른 여러 테이블과 JOIN을 해야 합니다.

즉, 사이즈가 큰 테이블을 BIG이라 하면, 대략 아래와 같이 됩니다. BIG에 대한 검색조건은 모두 공통입니다.

SELECT *
FROM A, BIG
WHERE A, BIG 조인조건, BIG에 대한 검색조건
UNION ALL
SELECT *
FROM B, BIG
WHERE B, BIG 조인조건, BIG에 대한 검색조건
UNION ALL
SELECT *
FROM C, BIG
WHERE C, BIG 조인조건, BIG에 대한 검색조건

보니까 BIG에 대한 검색조건이 공통으로 들어가는 것 같아서 이 쿼리를 다음과 같이 바꿨습니다.

WITH TEMP_BIG
(
SELECT * FROM BIG WHERE BIG 공통 검색조건)
)
SELECT *
FROM A, TEMP_BIG
WHERE A, TEMP_BIG 조인조건
UNION ALL
SELECT *
FROM B, BIG
WHERE B, TEMP_BIG 조인조건
UNION ALL
SELECT *
FROM C, BIG
WHERE C, TEMP_BIG 조인조건


제가 판단이 잘 안서서 그러는데, 이런경우에 위와 같이 하는게 좋을까요?

아래와 같이 WITH로 만들어 놓고 하는것이 좋을까요?

실행계획 상에서의 COST 는 거의 차이가 없긴 합니다.. (사실 이것도 궁금합니다.)

그리고 지금은 힌트를 안줘도 템프 테이블이 만들어지는거 같습니다.

MATERIALIZE 힌트를 반드시 줘야 성능향상을 꾀할수가 있는건지도 궁금합니다.

그리고, 템프 테이블 SCOPE은 해당 쿼리의 종료시 소멸되는것이 맞는지도 궁금합니다...

궁금한게 너무 많습니다. 감사합니다.

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

다른 쿼리와 수행계획이 어우러져 풀리느냐 

아니면 독립된 임시 테이블처럼 쓰느냐 (MATERIALIZE힌트) 

차이가 있습니다. 

하지만 실행계획은 실행계획일뿐 실제 사용시 데이터버퍼와 

갈은 변수가 있기 때문에 

해당 쿼리가 반드시 with 절로 해야 수행속도가 향상된다고 할 수는 없습니다. 

쿼리 종료시 with 절이 캐쉬화 된건 사라집니다. 

 

cReAm(catz)님이 2012-03-29 17:05에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39372오라클 이럴 경우 문자변환은 어떻게??? [2]
조성훈
2012-03-30
4928
39371단위별 동일 값 설정하기 (쿼리문의) [3]
정용석
2012-03-30
4332
39370data gaurd backupset 삭제
qa
2012-03-29
3338
39369반복되는 INLINEVIEW 성격의 쿼리를 WITH로 빼는게 성능에 좋을까요? [1]
초짜
2012-03-29
4019
39368고수님들 속력문제 입니다. [1]
초보자
2012-03-28
3570
39366계정 권한에 대한 질문입니다 [3]
이수민
2012-03-27
3602
39365토드에서 백업
무명씨
2012-03-27
3385
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다