일단 Statement와 PreparedStatement의 차이점을 알기 전에 prepared Statement가 무엇인지에 대해 알아보자.
PreparedStatement란:데이터베이스 관리 시스템(DBMS)에서 동일하거나 비슷한 데이터베이스 문을 높은 효율성으로 반복적으로 실행하기 위해 사용되는 기능을 말할다.
그럼 PreparedStatement는 어떤식으로 동작할까?
1.준비(Prepare): 먼저 애플리케이션은 문의 틀을 만들고 이를 DBMS로 보낸다. 특정값은 지정하지 않은 채로 남겨진다
INSERT INTO products (name, age) VALUES (?, ?);
2.그 다음, DBMS는 문의 틀을 컴파일하며(최적화 및 변환) 아직 실행하지 않고 결과만 저장한다.
3.실행(Execute): 나중에 애플리케이션이 문 틀의 변수에 값(바인드)을 지정하면 DBMS는 (결과를 반환할 수도 있는) 문을 실행한다. 애플리케이션은 여러 값으로 원하는 횟수만큼 문을 실행할 수 있다. 위의 예에서 첫 번째 변수로 "bike"로, 두 번째 변수로 "20"을 지정한다.
자 그럼 우리가 궁금해오던 Statement와 PreparedStatement차이는 무엇일까?
Statement와 PreparedStatement의 아주 큰 차이는 바로 캐시(cache)사용여부이다.
Statement를 사용하면 매번 쿼리를 수행할 때마다 4단계를 거치게 되고(계속적으로 단계를 거치면서 수행)
PreparedStatement는 처음 한 번만 세 단계를 거친 후 캐시에 담아 재사용을 한다는 것이다. 만약 동일한 쿼리를 반복적으로 수행한다면 PreparedStatment가 DB에 훨씬 적은 부하를 주며, 성능도 좋다.
예를 들어보자.
Statement는 executeQuery() 나 executeUpdate() 를 실행하는 시점에 파라미터로 SQL문을 전달하는데, 이 때 전달되는 SQL 문은 완성된 형태로 한눈에 무슨 SQL 문인지 파악하기 쉽다. 하지만, 이 녀석은 SQL문을 수행하는 과정에서 매번 컴파일을 하기 때문에 Prepared Statement에 비해 효율성이 떨어진다 .
'잡다한 IT관련 지식' 카테고리의 다른 글
DLL(Dynamic Link Library) (0) | 2020.03.27 |
---|---|
크리덴셜 스터핑(credential stuffing) (0) | 2019.12.14 |
캐시(cache) (0) | 2019.10.27 |
메모리 계층 구조 (0) | 2019.10.27 |
프로세스 구성 요소 (0) | 2019.10.23 |
댓글