MySQL更新300万行表中的每一行

Rn2dy

要求:我必须扫描整个表并更新每个记录,期间。

正如其他人所建议的那样,我应该创建一个与原始表具有相同架构的临时表,并在更新后的值上进行插入,然后重命名表而不是在原始表上进行更新。

这个想法是这样的:

ResultSet row = select * from old_table;
While row.next
  do something to update values in this row
  insert updated values in to a identical table (different name of course)
endWhile

这里的问题是我正在使用Java JDBC,并且必须处理ResultSet对象。那么,有没有一种方法可以防止“ ResultSet row = select * from old_table”生成内存不足异常?

一个潜在的解决方案是分页,但这意味着我必须使用ORDER BY和LIMIT,这在300万行的表上可能非常慢。

ResultSet有一些技巧吗,例如指定一些标志,例如FOWARD_ONLY | 不可滚动等。或者Mysql服务器是否具有一些配置来执行某些智能操作,例如mysql理解我正在执行全表扫描,因此只是顺序地为我返回记录,但不是一次全部返回记录。

任何建议都欢迎

[UPDATE]似乎MySQL连接器/ J具有名为的配置参数useCursorFetch,如果设置为true,则statement.setFetchSize(1000)可以使用。不知道这是否是最终解决方案。

比尔·卡温

您可以通过以下方式将JDBC语句设置为非缓冲:

stmt.setFetchSize(Integer.MIN_VALUE); 

但是我也建议使用一条INSERT... SELECT语句,这样您就不必使用while循环,也不必获取任何内容。如果您可以在执行“一些操作以更新值”的步骤中使用SQL表达式,则可以在一条SQL语句中完成整个操作。

PS:您必须更具体地了解QuerySet。我在不同的库中找到多个称为QuerySet的类,例如org.dbunit.ant.QuerySet,org.gusdb.wdk.model.QuerySet等。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何有效地更新许多百万行表中每一行的INT列

来自分类Dev

EF如何创建用500万行更新SQLite表中的100万行所需的SQL?它会一排更新吗?

来自分类Dev

按键自动完成对300万行表的查询

来自分类Dev

包含MEDIUMTEXT的约300万行的MySQL性能问题?

来自分类Dev

更新mysql中每一行的表列

来自分类Dev

MySQL循环每一行并更新

来自分类Dev

在1000万行表(单表)中,MySQL中的SELECT查询非常慢

来自分类Dev

如何在PostgreSQL中用800万行数据更新表的一列

来自分类Dev

在中等MySQL表(100万行)上的慢查询

来自分类Dev

在中等MySQL表(100万行)上的慢查询

来自分类Dev

在具有500万行的表中对最长前缀进行匹配的最佳MYSQL查询

来自分类Dev

MySQL:对于表中的每一行,更改另一表中的一行

来自分类Dev

通过将列设置为 MySql 中其他两列的总和来更新表中的每一行

来自分类Dev

MySQL在单个插入中插入2万行

来自分类Dev

Excel 中 300 万行端口数据来自 txt

来自分类Dev

MySQL 更新表为每一行添加不同的数量

来自分类Dev

用相应的值更新表的每一行

来自分类Dev

如何更新动态 PHP 表的每一行

来自分类Dev

从继承的表中获取每一行的表名

来自分类Dev

表联接返回整个表中的每一行

来自分类Dev

从继承的表中获取每一行的表名

来自分类Dev

Linq2sql更新巨大表中的每一行

来自分类Dev

如何为mysql表的新列中的每一行生成唯一值?

来自分类Dev

MySQL遍历每一行(大表)

来自分类Dev

Google图表的MySqL表的每一行

来自分类Dev

更新每一行中的一列

来自分类Dev

更新时间戳在Hibernate中的每一行

来自分类Dev

如何更新文件中的每一行

来自分类Dev

每毫秒从ArrayAdapter更新Android ListView中的一行

Related 相关文章

热门标签

归档