많은 이들이 Static SQL 과 Dynamic SQL을 혼동하여 지칭해서 'SQL 전문가 가이드' 책의 내용을 빌어 글을 작성해봅니다.
- Static SQL
Static SQL은 String 변수에 담지 않고 코드 사이에 직접 기술한 SQL문을 말합니다.
위 캡처 사진과 같이 변수에 담지 않고 바로 실행했을 때의 SQL을 의미합니다.
많은 트랜잭션이 몰리는 증권이나 금융 쪽 DB에서는 Static SQL로 작성한다고 합니다.
'친절한 SQL 튜닝' 이나 '오라클 성능 고도화 원리 2'에서 옵션 조건을 중요시 다루는 이유가 바로 여기에 있다고 볼 수 있습니다. - 조시형 강사님曰
- Dynamic SQL
Dynamic SQL은 String 변수에 담아서 기술하는 SQL문을 말합니다.
즉, Application(Orange, Toad, Mybatis 등)에서 사용되는 모든 쿼리는 Dynamic SQL이라고 말할 수 있습니다.
위와 같이 'select_stmt'라는 char형 변수에 쿼리문을 담아 실행했을 때의 SQL을 의미합니다.
※ Dynamic SQL은 캐싱되지 않는다??
Dynamic SQL 중에서도 위와 같이 :empno 변수처럼 변수를 사용하지 않고 값을 숫자로 넣는다면 들어오는 문장마다 *하드 파싱을 진행해야 합니다.
한 개의 Application *커서가 한 개의 Session 커서를 바라보는 것이 아닌,
여러 개의 Application 커서가 생성이 되고 여러 개의 Session 커서를 바라보는 것.
※ Soft Parsing(소프트 파싱) & Hard Parsing(하드 파싱)
Soft Parsing : SQL과 실행계획을 캐시에서 찾아 곧바로 실행단계로 넘어가는 경우를 말함.
Hard Parsing : SQL과 실행계획을 캐시에서 찾지 못해 최적화 과정을 거치고 나서 실행단계로 넘어가는 경우를 말함.
* 자세한 내용 : https://chess-drive.tistory.com/4
※ 커서
Shared(공유) 커서 : SGA내에 Shared Pool 영역에 존재하는 라이브러리 캐시에 공유돼있는 Shared SQL Area에 저장된 커서
Session(세션) 커서 : PGA내에 Private SQL Area에 저장된 커서
Application(어플리케이션) 커서 : 세션 커서를 가리키는 핸들
'DA > 튜닝' 카테고리의 다른 글
[DA/튜닝] PostgreSQL 튜닝 관련 Parameter (0) | 2021.01.08 |
---|---|
[DA/튜닝] MySQL & MariaDB 튜닝 관련 Parameter (0) | 2020.08.25 |
[DA/튜닝] Oracle 튜닝 관련 Parameter (0) | 2019.08.21 |
[DA/튜닝] 날짜 Table 생성 (0) | 2019.07.18 |
[DA/튜닝] 다중행 결과 값을 단일행으로 변환 (0) | 2019.07.15 |