오라클 메모리영역(SGA) / 데이터데이스영역 있음
sql날릴때 최적화된 실행계획이 library cache영역에 저장되어 사용하게됨.
sql파싱 : syntax체크 → semantic(권한, 존재여부)체크 → library cache영역 저장되어있는 정보가 있는지 확인 ( 예전에 같은 sql을 실행한적이 있고 거기에 최적화된 실행계획이 저징되어있다면 캐시영역에서 꺼내서 사용하고 끝) → 없다면 옵티마이저에서 최적화된 실행계획을 계산하여 사용 → Row-source generation ( sql엔진이 해석할 수 있는 언어로 변환 ) → 실행
library cache에서 바로 꺼내서 사용하는 것
같은 쿼리 더라도 줄바꿈, 대소문자, 공백에 변화가 있는경우에 완전 다른 sql로 간주하므로 완벽하게 똑같은 텍스트로 sql을 짜는것이 중요함
( 데이터베이스는 sql문장을 키값으로 인식함 )
동적인 쿼리를 날릴때에도 바인드 변수를 사용하면 됨. 바인드 변수를 제외한 나머지 쿼리를 파싱 한 다음 마지막에 바인드 변수를 적용하게되므로 가능.