我正在访问一个UniVerse数据库,并读出其中的所有记录,以便将其同步到一个MySQL数据库,该数据库用于与使用该数据的其他一些应用程序兼容。其中一些表的记录长度超过250,000条,列超过100列,而且服务器相当旧,许多用户仍在同时使用它,因此它需要很长的时间才能完成任务.长..。有时候是时候读一下记录了。
示例:我将SSELECT执行为0,并开始读取select列表,将每条记录解析为我们的数据抽象类型,并将其放入.NET列表中。根据时刻的不同,获取每条记录可能需要250ms到3/4秒,具体取决于数据库的使用情况。删除提取方法只会略微加快速度,因为我认为当我调用UniFile.read时,即使我不使用它,它仍然会下载所有的记录信息。
以这种速度读取250,000条记录是非常慢的,所以有谁知道我可以用什么方法来加快速度呢?有没有我应该在某个地方设置的选项?
发布于 2012-06-11 19:45:55
您真的需要使用SSELECT (排序选择)吗?按记录键排序将会产生额外的性能开销。如果您不需要以排序的方式进行同步,那么只需使用普通的SELECT,这应该会提高性能。
如果这不起作用,那么尝试在系统使用率较低的时候自动运行同步,如果可能的话,当只有很少或没有用户登录到UniVerse系统时。
除此之外,可能是您要导出的某些表需要调整大小。如果它们不是动态文件(自动调整大小类型30),则它们可能已进入磁盘上的溢出空间。要找出最大表的大小并查看它们是否溢出,可以在命令行中使用FILE.STAT和HASH.HELP等命令来检索更多信息。使用HELP FILE.STAT或HELP HASH.HELP查看这些命令的文档,以便提取所需的信息。
如果这些命令显示您的文件类型为30,则数据库引擎会自动调整它们的大小。但是,如果文件类型从类型2到类型18,HASH.HELP命令可能会建议您对表大小进行更改,以提高其性能。
如果这些都没有帮助,那么您可以使用LIST.INDEX TABLENAME ALL检查表上的有用索引,您可以使用它来加快选择速度。
发布于 2013-01-15 11:58:28
使用ANALYZE-FILE fileName确保您的文件大小正确。如果不是动态的,请确保没有太多的溢出。
使用SELECT而不是SSELECT将意味着您将按顺序而不是随机地从数据库读取数据,并且明显更快。
您还应该调查如何从每个记录中提取数据并将其放入列表中。通常,挑选数据分隔符字符254、253和252与外部数据库不兼容,需要转换。如何做到这一点可以对性能产生巨大的影响。
从最初的post中还不清楚,但是WRITESEQ可能是输出文件数据的最有效的方式。
https://stackoverflow.com/questions/10936721
复制相似问题