달마루
기획자에서 개발자로
달마루
전체 방문자
오늘
어제
  • 분류 전체보기 (334)
    • 기획 이야기 (3)
    • 개발자로 전향한 이유 (1)
    • Github Address (1)
    • 개발자, 그 여정 (11)
      • 기초특강 (4)
      • 국비학원 선정 (4)
      • BitCamp_수업내용 (1)
      • 학원 프로젝트 후기 (1)
      • 정보처리기사 (1)
      • 개발 이야기 (0)
    • 개념 창고 (126)
      • JAVA (50)
      • CS (1)
      • Database (27)
      • NetWork (2)
      • 자료 구조 (2)
      • React (8)
      • Spring (3)
      • JPA (1)
      • HTML & CSS (18)
      • JS (3)
    • algorithm (186)
      • 백준 (161)
      • 프로그래머스 (23)
    • 사는 이야기 (0)

블로그 메뉴

  • Github
  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • SQL고득점Kit
  • Scanner
  • 프로그래머스
  • Algorithm
  • MySQL
  • BRONZE
  • react
  • select
  • 알고리즘풀이
  • 백준
  • 백준알고리즘
  • java
  • 혼자공부하는SQL
  • java algorithm
  • HTML
  • SQL
  • BOJ algorithm
  • Bronze III
  • math
  • 문제풀이
  • 혼공MySQL
  • sql 문제풀이
  • 알고리즘
  • 백준문제풀이
  • Bronze IV
  • BOJ
  • Bronze V
  • 혼공SQL
  • programmers
  • 자바

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
달마루

기획자에서 개발자로

개념 창고/Database

[ORACLE] SQL 변수 종류 / 리터럴(literal) 변수와 바인드(bind) 변수

2023. 3. 22. 11:22

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
    '개념 창고/Database' 카테고리의 다른 글
    • ORACLE DB LINK 정의 및 사용 방법
    • [SQL] COUNT(*) 과 COUNT(1) 과 COUNT(칼럼명)과 COUNT(DISTINCT 칼럼명)의 차이
    • (혼공MySQL)20.자동으로 실행되는 트리거(trigger)의 개념과 트리거를 활용하여 데이터 백업하는 방법
    • (혼공MySQL)19.스토어드 함수와 커서의 개념, 커서(cursor)의 단계별 실습 방법
    달마루
    달마루
    항상 어제보다 좋은 코드를 지향합니다. https://github.com/LimDongHyun99

    티스토리툴바