SQL 변수 종류
1. 리터럴 변수 란?
SQL문 중 WHERE 절에 column과 비교되는 값이 상수값으로 직접 선언된 변수
예) SELECT * FROM TABLE01 WHERE COL01 = "TEXT";
2. 바인드 변수 란?
SQL문 중 WHERE절에 column과 비교되는 값이 바인드 변수 형태로 사용하는 경우의 변수
바인드 변수의 자리에는 Parameter로 넘겨지는 값들이 대체됨.
예) SELECT * FROM TABLE01 WHERE COL01 :1;
3. MyBatis에서 처리 변수 처리 방식
#{value} - 리터럴 처리
SELECT * FROM TABLE01 WHERE COL01 = #{value}
${value} - 바인드 처리
SELECT * FROM TABLE01 WHERE COL01 = ${value}
리터럴 변수 - HARD PARSE 해당
바인드 변수 - SOFT PARSE 해당
------------------------------------
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 에 실행하고자 하는 구문이 없는 경우 구문분석 및 실행계획을 위해 사용되는 영역
--------------------------------------
'개념 창고 > Database' 카테고리의 다른 글
ORACLE DB LINK 정의 및 사용 방법 (0) | 2024.09.15 |
---|---|
[SQL] COUNT(*) 과 COUNT(1) 과 COUNT(칼럼명)과 COUNT(DISTINCT 칼럼명)의 차이 (1) | 2024.07.24 |
(혼공MySQL)20.자동으로 실행되는 트리거(trigger)의 개념과 트리거를 활용하여 데이터 백업하는 방법 (0) | 2023.03.20 |
(혼공MySQL)19.스토어드 함수와 커서의 개념, 커서(cursor)의 단계별 실습 방법 (0) | 2023.03.20 |
(혼공MySQL)18.스토어드 프로시저(stored procedure)의 개념과 사용 방법(입출력 매개변수의 활용 방법) (0) | 2023.03.20 |