1. where a and b 조건일 경우
a,b 컬럼에 각각 인덱스를 만들어선 안된다.
(a+b) 나 (b+a)의 형식으로 인덱스를 만들어야 함.
ex) 30명(남27명/여3명) 중 남자중에 빨간펜을 든 사람을 찾아라.
① 남자 부터 찾고 빨간펜을 찾을 경우 : 총30명을 스캔해서, 27명의 남자를 찾아낸후, 27명을 스캔해서 빨간펜 들고있는 1명을 찾아낸다.
② 빨간펜을 들고있는 사람을 찾고 그중 남자를 찾을 경우 : 총 30명을 스캔해서, 1명의 빨간펜 든 사람을 찾아낸후, 1명을 스캔해서 남자를 찾아낸다.
결론 : 둘 중 값이 적은 것부터 먼저 언급된 인덱스가 좋음.
① 의 경우 1차:30, 2차:27번의 스캔을 해야 한다.
② 의 경우 1차:30, 2차:1번의 스캔을 해야한다.
▶ ②의 경우가 훨씬 빠른 결과를 낼수있다.
첫 컬럼에서 많이 걸러줘야 한다.
2. 구간검색 할때는 between 쓰면 안된다.
in 연산자를 써서 검색해주면 성능 좋아짐.
ex)
① between '111' and '222' 보다, in ('111', '222') 의식으로 작성해 주면 좋다.
위의 에처럼 단순한경우 상관없지만, 값이 많아서 복잡하다면 서브쿼리를 써야 한다.
②
where pname='새우깡'
and pdate between '0101' and '0131';
(x)
where pname='새우깡'
and pdate in ('0101','0102','0103'...'0131');
(o)
▶
and pdate in (select date
from tdate
where date between '0101' and '0131');
tdate에는 30건의 데이터(날짜만)만 들어있다.
→ 기존 pname과 pdate 가 들어있는 xxx건의 데이터가 들어있는곳에서 데이터 빼오는 것보다 빠르다.
'Oracle > Oracle - 튜닝' 카테고리의 다른 글
튜닝 - 파티션테이블 (3) | 2012.03.15 |
---|---|
튜닝 - 옵티마이저 (Optimizer) (0) | 2012.03.13 |
튜닝 - SQL 실행 계획 확인하기 : SQL Trace 및 TKPROF (1) | 2012.03.13 |
튜닝 - SQL 실행 계획 확인하기 : SQL*Plus Auto Trace 활용 (2) | 2012.03.13 |