Plan Cache

바인드 변수는 SQL 형태를 안정화하지만 계획 선택은 DBMS마다 다르다

바인드는 재사용 가능성을 높이지만, 값 분포가 치우치면 캐시된 계획이 특정 값에는 불리할 수 있다.

리터럴 SQL

WHERE user_id = 1001
WHERE user_id = 1002
WHERE user_id = 1003
문제

텍스트가 계속 바뀌면 재사용 가능성이 낮아진다.

바인드/준비된 문장

WHERE user_id = :uid
장점

SQL 형태가 안정되어 재사용 가능성이 커진다.

DBMS
확인할 계획 캐시 특성
주의점
Oracle
cursor sharing, bind peeking, adaptive cursor sharing
값별 선택도 차이
PostgreSQL
prepared statement의 generic/custom plan
generic 전환 시 성능 편차
MySQL
세션 prepared statement와 드라이버 캐시
서버/클라이언트 캐시 구분