안녕하세요. 오라클 인덱스생성과 쿼리 속도문의드리려고 합니다.!
현재 쿼리는 아래와 같습니다.
select t1.col1, t2.col1, t3.col1, t4.col1, t5.col1, t6.col1, t7.col1
from t1, t2, t3, t4, t5, t6, t7
where
1=1
AND t2.col2 = t1.col2
AND t2.col3 = '조건'
AND ( t2.col4 <= '조건' AND '조건' < t2.col5 )
AND t2.col6 = t3.col2(+)
AND t4.col2 = t5.col2
AND t2.col7 = t4.col3
AND t4.col4 = '조건'
AND ( t4.col5 <= '조건' AND '조건' < t4.col6 )
AND t5.col3 = t6.col1(+)
AND t5.col4 = t7.col2(+)
AND t1.col3 = '조건'
AND t1.col4 = '조건'
AND ( t1.col5 <= '조건' AND '조건' < t1.col6 )
현재상황
1. 조인해야하는 테이블 7개
2. 조인하는 테이블이 많아서 조건다넣고 조회 시 데이터 건수가 1000건 정도 나오는데 30초정도 걸림.
3. null 데이터도 다 뽑아야하기때문에 outer join 써야함.
4. t4, t5의 순수 데이터가 200만건 이상, 나머지테이블은 데이터가 1000건 이하.
궁금한내용
속도를 단축시키기 위해서
1. 모든테이블에 인덱스를 생성해줘야하는건지 아니면 t4, t5에만 사용중인 칼럼으로 인덱스 생성해주면 되는건가요?
2. t4테이블의 인덱스는 col2, col3, col4, col5, col6
t5테이블의 인덱스는 col2, col3, col4로 생성해주면 되는건가요??
3. 혹시 속도를 더 단축시킬수 있는 방법이 있다면 알려주세요!! 부탁드립니다.
질문이 막연하거나 이상하면 알려주세요 고수님들의 답변 기다리겠습니다
1. 조건 검색에 필요한 항목
2. 조인 조건에 필요한 항목
3. 조회 할 항목
위 세가지 경우를 복합적으로 고려해야 합니다.
주 테이블과 부 테이블을 구별하셔야 합니다.
A. (주 테이블) 조회 조건이 들어가는 메인이 되는 테이블 : t1, t2, t4
B. (부 테이블) 조회 조건 없이 조인 되는 테이블 : t5, t3, t6, t7
주 테이블들 간의 연결 순서에 따른 유불리 상황도 검토하셔야 합니다.
검색량을 획기적으로 줄일 수 있는 조건이 있는 테이블을 먼저 읽도록
가. t1 > t2 > t4
나. t1 > t4 > t2
다. t2 > t1 > t4
라. t2 > t4 > t1
마. t4 > t1 > t2
바. t4 > t2 > t1