- 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;
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 가 사용되며,select * from t1 where f1(c1) = :b1;
select * from t1 where f1(c1) > :b1; -- 5%
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%';
select * from t1 where c1 like '%A';
select * from t1 where c1 like '%A%';
가급적 Magic Number 를 사용하지 않아야 겠지만 ...
Bind 변수의 경우 Soft Parsing 에 유리하기 때문에 trade off 를 고려하여(패턴에 따라서..) 튜닝해야 한다.
댓글 없음:
댓글 쓰기