循环需要太多时间

时间:2013-03-25 09:49:09

标签: java oracle

此select语句返回4k +行。我的应用程序占用的时间是while循环。单独循环需要2到4分钟。有关如何优化它的任何想法?

不要太担心查询本身,因为它不会花太多时间在查询响应上。

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);
            }

2 个答案:

答案 0 :(得分:5)

问题很可能是您的SQL语句。将4,000个条目添加到列表中,不会花费任何明显的时间。

如果这不是拼写错误

WHERE mmi.interests like '%-' || mai.memserv_id || '-%'

你最终将整个表作为结果集。

答案 1 :(得分:0)

我猜它不是while循环,但是从数据库中检索数据的时间必须花费相当多的时间 - 这是在迭代结果集期间。

不要在while循环中创建任何对象,只需迭代结果集并查看所需的时间。应该差不多。