문제

새 응용 프로그램에는 JDBC를 사용하여 JPA를 사용하고 싶습니다. JPA Entity Manager의 명명 된 쿼리 및 기본 CRUD 메소드를 엄격히 사용하고 있습니다.이 관리자는 데이터베이스에서 수행 될 모든 SQL 기본 쿼리를 추출 할 수 있습니다 (최대 절전 모드 또는 기타 JPA 구현). 이 정적 쿼리 목록을 사용하면 요청의 모든 실행 계획 인 DB2 패키지를 빌드 할 수 있음을 이해합니다.

제 질문은 다음과 같습니다. DB2에 대한 JDBC를 통해 이러한 쿼리를 수행하면 해당 실행 계획을 활용할 수 있습니까? PureQuery 제품이 SQL 주문 목록을 캡처 할 수 있음을 이해합니다. PureQuery 특정 API를 통해서는 여전히 JDBC를 통해 더 많은 것을 제공합니까? 이러한 특정 DB2 정적 결합 기능? 아니면 JDBC와 동일합니까?

모든 대답에 감사드립니다.

도움이 되었습니까?

해결책

JDBC 응용 프로그램은 동적 SQL 만 실행합니다 (예 : DB2는 정적 패키지를 사용하지 않습니다).

정적 SQL (쿼리가 데이터베이스의 패키지에 저장되는 경우)을 얻는 방법은 두 가지뿐입니다. SQLJ (JPA/Hibernate를 제거 함)를 사용하여 응용 프로그램을 작성하거나 PureQuery (JDBC와 데이터베이스 사이에 있음)를 사용하십시오.

동적 SQL을 사용하더라도 DB2는 쿼리에 대한 실행 계획을 캐시하므로 자주 실행되면 (즉, 캐시에 남아 있음) 쿼리 컴파일에서 오버 헤드가 표시되지 않습니다. 캐시는 쿼리가 정확한 바이트 일치 인 경우에만 유용합니다. select * from t1 where c1 = 1 동일하지 않습니다 select * from t1 where c1 = 2, 또한 그렇습니다 select * from t1 where C1 = 1 (동일한 결과를 제공하지만 쿼리는 다릅니다). 매개 변수 마커 사용 (select * from t1 where c1 = ?) 핵심입니다. DBA는 카탈로그 캐시의 크기를 조정 하여이 캐시의 적중률을 최대화 할 수 있습니다.

캐싱은 쿼리를 반복적으로 컴파일하는 것을 피하는 데 도움이되지만 정적 SQL이하는 계획 안정성을 제공하지 않으므로 ymmv.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top