바인드 변수로 플랜을 확인해야 한다
옵티마이저는 상수 값이 다르면 서로 다른 쿼리로 인식해 파싱을 새로 한다. 프로그램에 바인드 변수로 되어있다면 상수값 대신 바인드 변수로 플랜을 확인해야 한다.
ACCESS FULL테이블 FULL SCAN을 의미하며 아래와 같은 이유로 발생한다
테이블 FULL SCAN을 의미하며 아래와 같은 이유로 발생한다.
- 해당 쿼리에 대한 적절한 인덱스가 존재하지 않으므로 필요한 인덱스 생성하여 해결한다.
- 인덱스는 존재하나 부정확한 통계정보로 인해 인덱스를 차지 않는 경우로, 최신 통계 정보를 구성하거나 힌트절을 사용해 해결한다.
- 테이블 FULL SCAN하는 것이 인덱스 통한 랜덤 엑세스보다 유리한 경우로 데이터 조회 범위가 커 인덱스를 사용하는 것이 효용성이 없는 것이다.
서브쿼리는 일반적으로 지양한다
스칼라 서브쿼리는 리턴 건수마다 결과를 수행해 대량 결과 리턴 쿼리에서는 성능이 떨어질 수 있다
- select 절의 서브쿼리 : 스칼라 서브쿼리
- from 절의 서브쿼리 : 인라인 뷰
- where 절의 서브쿼리 : 서브쿼리
*스칼라 서브쿼리의 예
select uno, (select u.studtid from univ u
where s.studid= u.studid) studentid
from stud s
where enroll like '%2015%'
*ref : argolee.tistory.com/67
'Tech > DB' 카테고리의 다른 글
DB Link를 통해 다른 DB에 있는 데이터 Row 복사하기 (0) | 2021.11.02 |
---|---|
[DB] Outer Join (0) | 2021.05.10 |
[DB] Query Plan (0) | 2021.04.06 |