나는 단지 복잡한 시스템을 벤치마킹하고 있으며 Spring을 거치는 쿼리는 실제로 느리다는 것을 알게되었습니다.Spring jdbcTemplate을 사용하여 성능이 정상적으로 비교 됨 PreparedStatement
~ 600ms가 추가됩니다.
case TEMPLATE:
{
t = System.currentTimeMillis();
jdbcTemplate.update(getUnnamedPreparedStatement(query), new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps) throws SQLException {
int i = 1;
for (Object o : queryParameters) {
ps.setObject(i++, o);
}
}
});
break;
}
case PREPAREDSTATEMENT:
{
Connection c = dataSource.getConnection();
t = System.currentTimeMillis();
PreparedStatement ps = c.prepareStatement(getUnnamedPreparedStatement(query));
int index = 1;
for (Object parameter: queryParameters) {
ps.setObject(index++, parameter);
}
ResultSet rs = ps.executeQuery();
rs.next();
break;
}
두 쿼리는 동일한 결과를 제공하고, 순서는 중요하지 않습니다
벤치 마크 코드는 다음 비교합니다. 또한 쿼리 유형 (SELECT, UPDATE)에 의존하지 않습니다.
나는 12 번 테스트를 실행했으며 그 결과는 안정적입니다.
Spring jdbcTemplate은 PreparedStatement가 수행하지 않는 작업은 무엇입니까?
참고 사항 : 준비된 문구 시나리오에서는 연결에 소요되는 시간을 포함하지 않습니다. 구성에 따라이 작업이 사소하거나 시간 소모가 적다고 가정하는 것이 안전하지 않습니다. 귀하의 답변에 대해 – pap
아빠 덕분에. 그러나, 연결을 얻는 것은 나의 체제에서 arround 20ms를 잡는다. 그리고 jdbcTemplate은 기존 연결을 재사용하고 모든 업데이트에서 새로운 연결을 얻지 못한다고 가정합니다. – Felix
@Felix, 연결 재사용은 봄과는 아무 관련이 없습니다. 그래서 그것은 고려되어야합니다. – tom