programing

setFetchSize()는 언제 무엇으로 지정해야 합니까?

magicmemo 2023. 9. 3. 12:31
반응형

setFetchSize()는 언제 무엇으로 지정해야 합니까?

JDBC/MySQL에 대해 setFetchSize()를 지정하라는 "베스트 프랙티스" 가이드가 많이 보입니다.

그러나 언제, 무엇(문, 결과 집합)을 지정해야 할지 모르겠습니다.

Statement.setFetchSize() or PreparedStatement.setFetchSize() 
ResultSet.setFetchSize()
  1. 이 두 가지 중에서 무엇을 지정해야 합니까?
  2. javadoc오라클 문서에서 "언제"인지 헷갈리는 부분이 바로 여기에 있습니다.

자바독

기본값은 결과 집합을 만든 문 개체에 의해 설정됩니다.가져오기 크기는 언제든지 변경할 수 있습니다.

오라클 문서

결과 집합이 생성된 후 문 개체의 가져오기 크기를 변경해도 해당 결과 집합에는 영향을 주지 않습니다.

제가 틀렸다면 고쳐주세요.이것은 쿼리가 실행되기 전에 setFetchSize가 Affective만 된다는 것을 의미합니까?(따라서 ResultSet에 setFetchSize를 설정해도 소용이 없습니까?그러나 "언제든지 페치 크기가 변경될 수 있습니다"?가 발생합니다.

당신은 결과 집합에 대한 공식 문서에서 이 페이지를 읽어야 합니다.라고 써있습니다

기본적으로 ResultSet은 완전히 검색되어 메모리에 저장됩니다.대부분의 경우 이 방법이 가장 효율적인 운영 방법이며 MySQL 네트워크 프로토콜의 설계로 인해 구현이 더 쉽습니다.행 수가 많거나 값이 큰 ResultSets를 사용하는 경우 JVM에서 필요한 메모리에 힙 공간을 할당할 수 없는 경우 드라이버에게 한 번에 하나의 행을 다시 스트리밍하도록 지시할 수 있습니다.

stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
                            java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);

가져오기 크기가 정수인 순방향 전용, 읽기 전용 결과 세트의 조합입니다.MIN_VALUE는 결과 세트를 한 행씩 스트리밍하라는 드라이버에 대한 신호 역할을 합니다.이 후에는 문으로 작성된 결과 집합이 한 행씩 검색됩니다.

실제로 fetchSize만 설정해도 connector-j 구현에는 영향을 주지 않습니다.

질문에 대한 예를 들어 좋은 기사를 찾았습니다.

https://www.baeldung.com/jdbc-resultset

7.1. 문 7.2의 가져오기 크기 사용.결과 집합에서 가져오기 크기 사용

언급URL : https://stackoverflow.com/questions/20899977/what-and-when-should-i-specify-setfetchsize

반응형