2014-10-29 4 views
0

성능 현명한 예를 들어, 이가지 경우 아래에 가장 적합한 하나데이터베이스 성능은 어느 것입니까?

버전 1 :

int value1 = rs.getInt(1); 
String value2 = rs.getString(2); 

버전 2 : 사용하는 것이 가장 좋습니다 하나

int value1 = rs.getInt("VALUE1"); 
String value2 = rs.getString("VALUE2"); 

? 많은 곳에서 1 단계와 같은 코드를 추가했습니다. 나는 그것이 정말로 합리적인지를 알고 싶다.

+0

Iirc,'ResultSet'은'rs.next()'를 호출 할 때 다음 (몇개?)의 행을 로컬에 캐쉬하므로 성능에 차이가 있어서는 안됩니다. Btw : 재미있는 질문! – stuXnet

+7

1) 데이터베이스 및 JDBC 드라이버에 따라 다릅니다. 2) 성능의 차이는 매우 작아서 99.5 %의 경우에는 관련이 없습니다. 3) 정말로 신경을 쓰면 벤치 마크하십시오. –

+0

DB 호출 후 결과를 읽는 방법에 대한 성능 고려 사항은 완전히 부적합합니다. –

답변

1

위와 같이, JDBC 드라이버가 ResultSet 인터페이스를 구현하는 방법에 따라 다릅니다. 예를 들어, MySQL jdbc driverString 변형 열 인덱스 컬럼 명으로부터 추가 매핑을 필요로하기 때문에 getInt(int)보다 빠르게 getInt(String)이다

당연히
public int getInt(int columnIndex) throws SQLException { 
    ... 
} 

public int getInt(String columnName) throws SQLException { 
    int idx = findColumn(columnName); 
    return getInt(idx); 
} 

유사한 두 getInt() 방법을 구현한다.

실제로 중요합니까? 가능성이 높습니다. 확실하지 않으면 테스트 데이터를 작성하고 벤치 마크하십시오. fetch size과 같은 다른 요인은 전체 실적에 훨씬 더 큰 영향을줍니다.

getInt(String) 변형을 선호합니다 (문 (투영에서 열 추가/삭제)에 대한 수정이 더 강력하므로이 변종을 항상 선호합니다.

관련 문제