PLAN CACHE

바인드 변수와 계획 재사용은 DBMS마다 다르다

바인드는 SQL 형태를 안정화하지만, 계획 캐싱과 값 분포 해석은 Oracle, PostgreSQL, MySQL이 서로 다르게 처리한다.

LiteralPreparedPlan choice

리터럴 SQL

text churn
WHERE user_id = 1001 WHERE user_id = 1002 WHERE user_id = 1003

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

바인드/준비된 문장

stable shape
WHERE user_id = :uid

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

Oracle cursor sharing, bind peeking, adaptive cursor sharing
PostgreSQL prepared statement의 generic/custom plan 선택
MySQL 세션 단위 prepared statement와 캐시 동작 확인