2009년 10월 25일 일요일

Magic Number

Magic Number 란??
   - 
Oracle 이 정확한 Selectivity 를 계산할 수 없을때 사용되는 Default  값이다.

Oracle 이 Magic Number 를 사용했다는것은 제대로된 실행계획을 산출해내지 못할 가능성이 높기 때문에,

상황에 따라서 통계정보 또는 SQL 튜닝을 해야 할 것이다.

Magic Number 는 주로 바인드 변수에 의하여 선택이 된다. 바인드 변수 사용시 어떤 값이 나올지 예측하기

힘들기 때문에 사용되는것이다.

1. Range : 5%

select * from t1 where c1 >= :b1;
select * from t1 where c1 <= :b1;
select * from t1 where c1 between :b1 and :b2;

2. Function : 1%

select * from t1 where f1(c1) = 1;
select * from t1 where f1(c1) = :b1;
select * from t1 where f1(c1) > :b1; -- 5%
Function 사용시 어떤 값이 return 될지 알수 없기 때문에 magic number 가 사용되며,
Function Based Index를 사용하여 해결 가능하다.

3. Like : 5%

select * from t1 where c1 like :b1;
select * from t1 where c1 like '%A';
select * from t1 where c1 like '%A%';

가급적 Magic Number 를 사용하지 않아야 겠지만 ...
Bind 변수의 경우 Soft Parsing 에 유리하기 때문에 trade off 를 고려하여(패턴에 따라서..) 튜닝해야 한다.

댓글 없음:

댓글 쓰기