1

この 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);
            }
4

2 に答える 2

5

最も可能性の高い問題は、SQL ステートメントにあります。リストに 4,000 エントリを追加しても、それほど時間はかかりません。

これがタイプミスでなければ

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

テーブル全体が結果セットになります。

于 2013-03-25T09:55:00.783 に答える
0

while ループではないと思いますが、データベースからデータを取得するのにかなりの時間がかかるはずです。これは、結果セットの反復処理中です。

while ループでオブジェクトを作成しないでください。結果セットを反復処理して、所要時間を確認してください。ほぼ同じはずです。

于 2013-03-25T09:51:43.370 に答える