이 select 문은 4k + 행을 반환합니다. 내 응용 프로그램에서 시간이 걸리는 부분은 while 루프입니다. 루프만으로는 2 ~ 4 분이 걸립니다. 그것을 최적화하는 방법에 대한 아이디어?While 루프가 너무 많은 시간이 걸린다
쿼리 응답에 너무 많은 시간이 걸리지 않으므로 쿼리 자체에 대해 크게 걱정하지 마십시오.
ArrayList<MembershipMemberInterestsVo> list = new ArrayList<MembershipMemberInterestsVo>();
StringBuffer sql = new StringBuffer();
sql.append("SELECT to_char(mai.id_info) as id, ");
sql.append("to_char(mai.field_title) as title, ");
sql.append("to_char(mmi.member_id) as membership_id ");
sql.append("FROM memserv_member_interests mmi, memserv_add_info mai ");
sql.append("WHERE mmi.interests like '%-' || mai.memserv_id || '-%' ");
sql.append("AND mai.soc_body_id = ? ");
sql.append("UNION ");
sql.append("SELECT to_char(mit.interest_id) as id, ");
sql.append("to_char(mit.text) as title, ");
sql.append("to_char(mit.member_id) as membership_id ");
sql.append("FROM memserv_member_interest_text mit ");
sql.append("WHERE society_id = ?");
pstmt = conn.prepareStatement(sql.toString());
pstmt.setString(1, societyId);
pstmt.setString(2, societyId);
rs = pstmt.executeQuery();
MembershipMemberInterestsVo vo = null;
while (rs.next()) {
vo = new MembershipMemberInterestsVo();
vo.setInterestId(rs.getString("id"));
vo.setMembershipId(rs.getString("membership_id"));
vo.setTitle(rs.getString("title"));
vo.setSocietyId(societyId);
list.add(vo);
}
멀티 스레딩을 시도해 보셨습니까? –
데이터베이스가 Java가 아닌 데이터베이스 프로세스에 있습니까? 프로파일 러를 사용하십시오. while 루프 내에 특별히 문제가있는 것 같지 않습니다. 인덱싱되지 않으면 SQL이 느린 것을 상상할 수 있습니다. –
ArrayList를 프레시화하면 문제가 완화됩니다. 기본 크기는 10이고 크기는 (용량 * 3)/2 + 1로 커집니다. 크기가 커지면 이전 배열의 내용을 새 배열에 복사해야합니다. 멤버쉽 클래스를 추측하고있는 것은 아닙니다. 무거운? – Erik