티스토리 뷰

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 에 실행하고자 하는 구문이 없는 경우 구문분석 및 실행계획을 위해 사용되는 영역

 


MyBatis에서 처리 변수 처리 방식

  • #{value} - 리터럴 처리
    • SELECT * FROM TABLE01 WHERE COL01 = #{value}
  • ${value} - 바인드 처리
    • SELECT * FROM TABLE01 WHERE COL01 = ${value}

결론

위 개념을 파악하였다면 각 SQL변수는 어떤 parsing에 해당하는지 구분이 가능.

리터럴 변수 - HARD PARSE

바인드 변수 - SOFT PARSE

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함