当前位置: 首页 > 知识库问答 >
问题:

While循环占用了太多的时间

谢华彩
2023-03-14

此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个答案

丁星火
2023-03-14

我想这不是while循环,而是从数据库中检索数据所花费的时间,这肯定需要相当长的时间——这是在迭代结果集期间。

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

景令秋
2023-03-14

最可能的问题是您的SQL语句。向列表中添加4000个条目不会花费任何明显的时间。

如果这不是打字错误

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

您最终将得到整个表作为结果集。

 类似资料:
  • MySQLdump和上传过程花费了太长的时间(~8小时)来完成整个过程。 我正在将活动数据库转储到mysqldump.tar文件和几乎3GB。当我加载到新的数据库,它需要6-8小时来完成这个过程(上传到新的数据库)。 我要完成这个过程,推荐的解决方案是什么?

  • 问题内容: 我正在通过oracle认证的准Java SE7程序员实践考试(这本书),遇到一个问题,即使有解释,我也不明白答案。这是说明和代码: 它将打印3。循环主体执行两次,程序将打印3。 我不了解循环主体如何执行两次,也许我不了解什么意思。有人可以解释一下吗? 问题答案: 是 分配 其中B的逆分配给自身(真假之间有效地翻转) 在Java中,分配返回所分配的内容(因此可能) 因此将翻转b的值,然后

  • 我试图找出为什么我的while循环没有在我希望的时候退出。基本上,我正在做一个简单的游戏,其中两个玩家玩单词,如果他们玩一个允许的单词,每轮都可以得分。一旦一个玩家打出一个以特定字符结尾的单词,该玩家就输掉了游戏。 我的方法是(在循环之前)设置一个值为false,然后使用while循环来保持游戏继续进行,直到玩家输入一个丢失的单词,此时循环应该立即退出,而不是进入玩家2(目前确实如此)。这基本上是

  • 我有一个包含单个面板的JFrame。在面板中,我使用paintComponent方法根据JFrame的大小调整其元素的大小。JPanel的元素是一个作为背景的图像和4个JLabel,它包含4个ImageIcon,工作方式类似于按钮。Jpanel的方法paintComponent如下所示 这个框架只有一个简单的方法,add(myPanel)所以我没有在这里写它。当我运行这个应用程序时,它占用了我大约

  • 我正在我的SQL中使用一个查询。首先我用 我该怎么做才能让它快过2秒

  • 问题内容: boolean r = false ; int s = 0 ; while (r == false) ; { s = getInt() ; if (!(s>=0 && s<=2)) System.out.println (“try again not a valid response”) ; else r = true ; } 即使输入3或123,循环也不会终止,文本也不会显示。怎么了