当前位置: 首页 > 面试题库 >

使用JDBC遍历大表的最快方法

桂玉石
2023-03-14
问题内容

我正在尝试创建一个Java程序来清理和合并表中的行。该表很大,大约有50万行,而我当前的解决方案运行得非常慢。我要做的第一件事就是简单地获得一个内存中的对象数组,这些对象表示表的所有行。这是我在做什么:

  • 一次选择说1000行的增量
  • 使用JDBC在以下SQL查询中获取结果集SELECT * FROM TABLE WHERE ID> 0 AND ID <1000
  • 将结果数据添加到内存数组中
  • 继续以1000为增量,一路查询多达500,000,每次添加结果。

这需要很长时间。实际上,它甚至没有超过第二个增量(从1000到2000)。查询要花很长时间才能完成(尽管当我直接通过MySQL浏览器运行同一件事时,它的运行速度相当快)。自从我直接使用JDBC以来已经有一段时间了。有更快的选择吗?


问题答案:

首先,确定要在内存中存储整个表吗?也许您应该考虑(如果可能)选择要更新/合并/等的行。如果确实需要整个表,则可以考虑使用可滚动的ResultSet。您可以这样创建它。

// make sure autocommit is off (postgres)
con.setAutoCommit(false);

Statement stmt = con.createStatement(
                   ResultSet.TYPE_SCROLL_INSENSITIVE, //or ResultSet.TYPE_FORWARD_ONLY
                   ResultSet.CONCUR_READ_ONLY);
ResultSet srs = stmt.executeQuery("select * from ...");

它使您可以使用“绝对”和“相对”方法移动到所需的任何行。



 类似资料:
  • 问题内容: 我从书中得知,您应该为循环编写这样的代码: 因此不会每次都计算。 其他人则说编译器会对此做一些优化,因此您可以编写: 我只想知道哪种是最佳实践? 问题答案: 在使用大多数现代浏览器执行此测试之后… http://jsben.ch/dyM52 当前,最快的循环形式(我认为在语法上最明显)。 具有长度缓存的循环的标准 我想肯定的是,我为JavaScript引擎开发人员鼓掌。应该优化运行时间

  • 我有一个自定义对象列表(

  • 问题内容: 在Java中,迭代字符串中所有字符的最快方法是: 或这个: 编辑: 我想知道的是,在长时间的迭代过程中重复调用该方法的开销是否小于或大于在开始时执行一次单次调用然后在迭代过程中直接访问数组的开销。 如果有人能够针对不同的字符串长度提供可靠的基准测试,那将是非常不错的,同时考虑到JIT的预热时间,JVM的启动时间等,而不仅仅是两个调用之间的区别。 问题答案: 在我的AMDx64 8cor

  • 我试图在Java中使用Selenium遍历一个表(目前使用的是chromedriver)。该表的内容由不同的人组成,他们的个人资料有链接,对于该表中的每个人,我将进入他们的个人资料并提取一些信息。我将为X数量的人做这件事。该表每页包含5人,我通过单击分页按钮浏览页面” 现在来看这个问题:举个例子,我现在在exampleUrl。com/page\u包含表I,然后输入用户的配置文件并提取他们的信息,他

  • 本文向大家介绍C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法,包括了C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍jQuery使用each遍历循环的方法,包括了jQuery使用each遍历循环的方法的使用技巧和注意事项,需要的朋友参考一下 1、选择器+遍历 2、选择器+遍历 3、更适用的遍历方法 1)先获取某个集合对象 2)遍历集合对象的每一个元素 下面看下jQuery 遍历 - each() 方法 总结 以上所述是小编给大家介绍的jQuery使用each遍历循环的方法,希望对大家有所帮助,如果