首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Derby in-memory db: select into语句内存不足

Derby in-memory db: select into语句内存不足
EN

Stack Overflow用户
提问于 2011-12-14 23:27:13
回答 1查看 466关注 0票数 4

在一个项目中,我必须使用一个带有一些大型表格的derby。为了获得一些性能,我从三个不同的表中选择文档ID到一个巨大的表中,以便查找文档类型。

基本上是一个非常简单的查询:

代码语言:javascript
复制
"INSERT INTO DOC_TYPES SELECT DOC_ID, 1 FROM TYPE_A_DOCUMENT"
"INSERT INTO DOC_TYPES SELECT DOC_ID, 2 FROM TYPE_B_DOCUMENT"
"INSERT INTO DOC_TYPES SELECT DOC_ID, 3 FROM TYPE_C_DOCUMENT"

当我在“正常”模式下运行时,使用我硬盘上的derby,它需要大约1分钟来处理,我最终在数据库中有大约650万行(很大,我知道...)

无论如何,对于我来说,数据库仍然很慢,所以我试着在内存中运行所有的东西。不幸的是,即使有4 DB的堆大小(我硬盘上的整个DB从未超过1 DB),操作的结果也相当快,出现了"java/lang/OutOfMemoryError“。

我真的看不到任何替代方案或解决方案来解决这个问题。Derby不支持物化视图,在Java中实现物化视图(SELECT、interate INSERT、INSERT)需要几个小时……

您也不能将语句“分块”,因为Derby似乎不支持LIMIT。

有什么建议/想法吗?

问候你,迈克尔

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-14 23:41:01

您可以尝试通过模数id创建块,将模操作的第二个值设置为所需的块数(n)。并从0开始重复比较..(n-1)

代码语言:javascript
复制
INSERT INTO DOC_TYPES SELECT DOC_ID, 1 FROM TYPE_A_DOCUMENT WHERE DOC_ID % 2 = 0
INSERT INTO DOC_TYPES SELECT DOC_ID, 1 FROM TYPE_A_DOCUMENT WHERE DOC_ID % 2 = 1

并为每个插入提交事务。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8507075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档