首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制整个大型OpenEdge表

复制整个大型OpenEdge表
EN

Stack Overflow用户
提问于 2017-10-20 10:24:31
回答 2查看 451关注 0票数 0

我需要找到读取大型OpenEdge表(1亿行以上)的最快方法,最好是以编程的方式(在c#中)和在诸如SSIS之类的ETL工具之外,或者像文本文件摘录这样的暂存格式之外。

我目前正在使用ODBC (驱动程序: OpenEdge 11.5)使用偏移量和获取修饰符批量查询OpenEdge 11.5表

代码语言:javascript
复制
SELECT COL_1, COL_2
FROM PUB.TABLE_1
ORDER BY ROWID ASC
  OFFSET {currentBatchStart} ROWS
  FETCH NEXT {batchSize} ROWS ONLY

我正在使用FetchArraySize: 25QueryTimeout: -1通过系统DSN查询。我正在连接到一个为SQL而设置的OpenEdge服务器组( message buffer size: 1024 )。

我发现性能很差(大约每15分钟就有100万条记录),我怀疑当我使用偏移量获取修饰符时,它只会慢下来。

我的问题是,我是否可以采用任何方法或设置来调整查询性能?

  1. 例如,是否有更好的方法来构造SQL查询?例如,我应该按索引中的列来排序,而不是ROWID吗?
  2. 是否应该增加sql server组上的消息缓冲区大小?

还是我应该考虑其他方法来从表中读取数据?

注意:每个批处理随后都会被sqlbulkcopy_‘编辑成Server表

EN

回答 2

Stack Overflow用户

发布于 2017-10-20 13:15:45

我不太了解ODBC --根据我对您的代码所能做的,这将带来越来越多的性能问题,就像您推测的那样。

我的建议是确定该表上的唯一索引,并使用该索引的键来确定下一步要获取的值。然后,您的查询变成如下所示:

代码语言:javascript
复制
WHERE table.KeyField > LastFieldValueRead 
ORDER BY table.KeyField
FETCH NEXT {batchSize} ROWS ONLY

然后db引擎可以使用您的字段值来查找偏移量并获得下一个值--这将比现在的性能要好得多。

如果这将是一个持续关注的问题,那么11.7已经有了用于记录数据更改以便在其他地方复制的更改数据捕获,并且进步公司出售Pro2工具来提供数据的持续复制。

票数 0
EN

Stack Overflow用户

发布于 2018-03-29 07:59:30

您应该编写OE代码,并通过.net功能连接到Server (如果我正确记得它在System.Data.SQL中的话)。

我用这种方式编写了一个转换工具,它从Server、Oracle、xBase和其他数据库中读取,并使用原始数据库中的几乎所有内容(表、字段和索引名称、格式以及数据类型必须转换的唯一内容)将它们存储到进度关系数据库中。而且我很肯定它也是相反的。

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

https://stackoverflow.com/questions/46847135

复制
相关文章

相似问题

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