0

我正在访问 UniVerse 数据库并读出其中的所有记录,以便将其同步到 MySQL 数据库,该数据库用于与使用该数据的其他一些应用程序兼容。一些表的长度 > 250,000 条记录,列 > 100 列,服务器相当陈旧,仍然被许多同时使用的用户使用,因此有时需要很长时间才能读取记录。

示例:我执行 SSELECT <file> TO 0 并开始读取选择列表,将每条记录解析为我们的数据抽象类型并将其放入 .NET 列表中。根据具体情况,获取每条记录可能需要 250 毫秒到 3/4 秒,具体取决于数据库使用情况。删除提取方法只会稍微加快它的速度,因为我认为即使我不使用它,当我调用 UniFile.read 时它仍然会下载所有记录信息。

以这种速度读取 250,000 条记录非常慢,所以有谁知道我可以加快速度的方法吗?我应该在某处设置一些选项吗?

4

2 回答 2

1

你真的需要使用 SSELECT(排序选择)吗?记录键上的排序将产生额外的性能开销。如果您不需要以排序方式同步,只需使用普通的 SELECT,这应该会提高性能。

如果这没有帮助,那么尝试在系统使用率较低的时候自动运行同步,如果可能的话,当很少或没有用户登录到 UniVerse 系统时。

除此之外,您导出的某些表可能需要调整大小。如果它们不是动态文件(自动调整大小 - 类型 30),它们可能已进入磁盘溢出空间。要找出最大表的大小并查看它们是否溢出,您可以在命令行中使用 FILE.STAT 和 HASH.HELP 等命令来检索更多信息。使用 HELP FILE.STAT 或 HELP HASH.HELP 查看这些命令的文档,以便提取您需要的信息。

如果这些命令显示您的文件的类型为 30,那么数据库引擎会自动调整它们的大小。但是,如果文件类型是从 2 到 18 的任何类型,则 HASH.HELP 命令可能会建议您对表大小进行更改以提高其性能。

如果这些都没有帮助,那么您可以使用 LIST.INDEX TABLENAME ALL 检查表上的有用索引,您可以使用它来加快选择速度。

于 2012-06-11T11:45:55.293 回答
0

使用 ANALYZE-FILE 文件名确保您的文件大小正确。如果不是动态的,请确保没有太多溢出。

使用 SELECT 而不是 SSELECT 将意味着您从数据库中顺序读取数据而不是随机读取数据,并且速度明显更快。

您还应该调查如何从每条记录中提取数据并将其放入列表中。通常pick数据分隔符chars 254、253、252会与外部数据库不兼容,需要进行转换。如何做到这一点会对性能产生巨大影响。

从最初的帖子中不清楚,但是 WRITESEQ 可能是输出文件数据的最有效方式。

于 2013-01-15T03:58:27.503 回答