티스토리 뷰
SQL 변수 종류
리터럴 변수 란?
sql 구문 중 where절에 column과 비교되는 값이 상수값으로 직접 선언된 경우의 변수
예) SELECT * FROM TABLE01 WHERE COL01 = "TEST";
바인드 변수 란?
sql 구문 중 where절에 column과 비교되는 값이 바인드 변수 형태로 사용하는 경우의 변수
바인드 변수의 자리에는 parameter로 넘겨지는 값들이 대체됨.
예) SELECT * FROM TABLE01 WHERE COL01 :=1;
PARSE 종류
HARD PARSE
- sql 구문을 수행 시 SGA - shared pool - Library Cache 영역에서 해당 구문이 존재 여부를 조회하여 존재하지 않는 경우 해당 구문의 문법 및 권한 검사, 테이블 및 컬럼 존재 여부 등을 수행 후 Library Cache 영역에 해당 구문을 적재함.
- 수행 시 CPU 사용량이 증가할 수 있음.
SOFT PARSE
- sql 구문을 수행 시 SGA - shared pool - Library Cache 영역에서 해당 구문이 존재여부를 조회하여 존재하는 경우 해당 구문의 파싱 트리, 실행계획 등을 재사용함.
- 재사용하기 때문에 실행 속도가 빠름.
- 처음 쿼리를 조회하고 동일한 쿼리를 다시 조회할 때 첫 번째 쿼리 속도보다 빠른 이유.
- 단 공백, 라인, 대소문자의 차이가 있다면 다른 구문으로 인식하여 hard parse 수행.
관련 ORACLE 메모리 구조
- SGA
- Shared pool : LRU(modified Least Recently Used) 알고리즘으로 관리, 서버 프로세스들이 정보를 공유하는 영역, Library Cache, Dictionary Cache 등을 위한 영역
- Library Cache : hard parse 후 구문이 저장이 캐쉬로 저장되는 영역
- Shared SQL Areas : 서버 프로세스가 공유하는 영역으로 다른 사용자가 조회한 구문을 실행하는 경우 해당 구문 공유 가능
- Private SQL Areas : 세션별 공유하는 영역으로 해당 영역은 커서수의 영향을 받음.
- Dictionary cache : Library Cache 에 실행하고자 하는 구문이 없는 경우 구문분석 및 실행계획을 위해 사용되는 영역
- Library Cache : hard parse 후 구문이 저장이 캐쉬로 저장되는 영역
- Shared pool : LRU(modified Least Recently Used) 알고리즘으로 관리, 서버 프로세스들이 정보를 공유하는 영역, Library Cache, Dictionary Cache 등을 위한 영역
MyBatis에서 처리 변수 처리 방식
- #{value} - 리터럴 처리
- SELECT * FROM TABLE01 WHERE COL01 = #{value}
- ${value} - 바인드 처리
- SELECT * FROM TABLE01 WHERE COL01 = ${value}
결론
위 개념을 파악하였다면 각 SQL변수는 어떤 parsing에 해당하는지 구분이 가능.
리터럴 변수 - HARD PARSE
바인드 변수 - SOFT PARSE
'DB' 카테고리의 다른 글
oracle 서브쿼리 rownum 조회시 ORA-00904 invalid identifier 원인파악 (0) | 2022.02.24 |
---|---|
[oracle 설정] UNDO tablespace 사용량 급증 현상 해결 (0) | 2020.12.22 |
[SQL] 문자형 비교연산자 (0) | 2020.07.15 |
[DB] SQL 다국어 데이터 깨짐 현상 해결 (0) | 2020.05.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- IMAGE
- Oracle
- WAS
- SSL
- docker
- jaxen
- web
- vscode
- html
- Git
- React
- Java
- 날짜
- JSON
- spring
- SpringBoot
- Linux
- mybatis
- parse
- 컨테이너
- SQL
- Windows
- 깨짐
- 이벤트발생
- jQuery
- JPA
- btye
- gradle
- TLS
- Eclipse
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함