--목차--
Statement?
PreparedStatement?
Statement vs PreparedStatement
--------
0. 둘 다 SQL을 실행할 수 있는 객체.
1. Statement?
1) 정의
2) 특징
변수 설정+바인딩에서 static sql 사용. (쿼리에 인자 부여 불가)
단일로 사용될 때 빠른 속도.
매번 컴파일 수행.
3) 동작 방식
ㄱ. Parsing(문장 분석) : 먼저 애플리케이션은 문의 틀을 만들고 DBMS로 보낸다. 특정값은 지정하지 않은 채로 남겨진다.
ㄴ. Compile(컴파일) : DBMS는 문의 틀을 컴파일하며(최적화 및 변환) 아직 실행하지 않고 결과만 저장한다.
ㄷ. Execute(실행) : 나중에 애플리케이션이 SQL문 틀에 있는 변수에 값(바인드)을 지정하면 DBMS는 (결과를 반환할 수도 있는) SQL문을 실행한다. (애플리케이션은 여러 값으로 원하는 회수만큼 SQL문을 실행할 수 있다.)
2. PreparedStatement?
1) 정의
DBMS에서 동일하거나 비슷한 데이터베이스의 SQL문을 높을 효율성으로 반복적으로 실행하기 위해 사용되는 기능.
2) 특징
쿼리 자체에 조건이 들어가는 dynamic sql 사용.
파싱 타임을 줄여주지만, dynamic sql을 사용하는데 따르는 퍼포먼스 저하를 고려해야 함.
처음에 프리컴파일 후, 이후는 컴파일 수행하지 않음.
여러번 수행될 대 빠른 속도.
SQL Injection 문제 보완.
3) 동작 방식
ㄱ. Parsing(문장 분석) : 먼저 애플리케이션은 문의 틀을 만들고 DBMS로 보낸다. 특정값은 지정하지 않은 채로 남겨진다.
ㄴ. Compile(컴파일) : DBMS는 문의 틀을 컴파일하며(최적화 및 변환) 아직 실행하지 않고 결과만 저장한다.
ㄷ. Execute(실행) : 나중에 애플리케이션이 SQL문 틀에 있는 변수에 값(바인드)을 지정하면 DBMS는 (결과를 반환할 수도 있는) SQL문을 실행한다. (애플리케이션은 여러 값으로 원하는 회수만큼 SQL문을 실행할 수 있다.)
3. Statement vs PreparedStatement?
1) 캐시의 사용여부
(정확히는 Application Layer에서 캐싱에 차이가 있음
Statement 사용시 : 매번 쿼리 수행마다 4단계를 수행.(계속적으로 단계 수행)
PreparedStatement : 처음 1번만 3단계를 거친 후 캐시에 담아 재사용 가능.
--> 동일한 쿼리를 반복적으로 수행하면 PreparedStatement가 DB에 적은 부하를 주고, 성능도 좋다.
DB마다 SQL 캐싱 한계가 있어서 성능상 캐싱되어야 할 쿼리가 캐싱되지 않을 수 있어서 꼭 필요한 문장만 사용 권장.
(테이블에서 레코드를 가져오는 부분이 가장 큰 시간적 비중을 차지하고, SQL문 파싱 시간은 1/10에 불과하다.)
2) PreparedStatement를 사용해야 하는 경우
사용자 입력값으로 쿼리를 생성하는 경우
쿼리 반복수행 작업일 경우
3) Statement 반드시 사용해야 하는 경우
Dynamic SQL을 사용할 경우 (매번 조건절이 틀려지므로 PreparedStatement의 캐싱 장점을 잃어버림)
4) 예외 조건
DB의 종류에 따라 성능차이에 대한 상황이 달라진다.
Oracle DB는 속도차이 발생, MySQL은 성능차이 거의 나지 않음.
참조
https://jungkeung.tistory.com/68
https://belights.tistory.com/356
'이론 공부 내용 정리' 카테고리의 다른 글
[CS스터디] 컴퓨터 구조 기초 (0) | 2022.12.26 |
---|---|
[CS스터디] Design Pattern - Singleton (0) | 2022.12.05 |
[CS 스터디] 동기와 비동기의 차이 (0) | 2022.11.07 |
[CS스터디] CPU 스케줄러 (0) | 2022.11.07 |
[CS 스터디] 프로세스 동기화 (0) | 2022.11.07 |