[MySQL] PREPARED STATEMENT

기훈·2024년 7월 14일

MySQL

목록 보기
10/23

PREPARED STATEMENT?

  • Binding Query
    pstmt = connection.prepareStatement("SELECT * FROM matt WhERE id = ?");
    pstmet.setInt(1, 1234);
    rs = pstmt.executeQuery();
  • SQL Injection을 방지할 수 있다
  • 2번째 이후 실행시 캐싱을 통해 파싱 비용이 감소된다
  • 캐싱을 하기 때문에 메모리 사용량 증가
  • 첫 번째 실행시 PREPARED STATEMENT 단계가 필요하기 때문에 네트워크 비용이 증가한다.
  • Execution-plan은 캐쉬되지 않음, Parse-Tree만 캐시됨
  • 캐싱은 하나의 커넥션내에서만 공유됨

PREPARED STATEMENT 잘 사용하기

  • 1번의 경우는 캐싱의 이점을 사용하지 못하고 매번 새로운 쿼리 파싱을 하게 된다.

결론

  • Server-side PREPARED STATEMENT는 예상하는 것처럼 성능을 크게 높여주진 않음
  • 반면 메모리는 꽤 많이 소비하게 됨
  • 부작용이 심한 경우가 많음
  • 서버 사이드보단 클라이언트 사이드를 권장함

0개의 댓글