此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);
}
你試過多線程嗎? – 2013-03-25 09:52:10
關於Java進程而不是數據庫高的CPU?使用分析器。看起來在while循環內沒有任何特別的問題。我可以想象,如果SQL沒有編入索引,SQL會很慢。 – 2013-03-25 09:52:38
推廣ArrayList應該做一些工作來緩解你的問題。默認大小是10,它增長(容量* 3)/ 2 + 1。當它增長時,你必須將舊數組的內容複製到新數組中。我猜測Membership *類並不是全部重? – Erik 2013-03-25 09:53:20