안녕하세요.
사이즈가 제법큰 이력 테이블에서 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은 해당 쿼리의 종료시 소멸되는것이 맞는지도 궁금합니다...
궁금한게 너무 많습니다. 감사합니다. |