【发布时间】:2011-04-08 11:39:28
【问题描述】:
我需要使用 ADO 从 Oracle 数据库中读取数百万个寄存器。应该使用哪些参数才能获得最佳性能?
【问题讨论】:
-
这是一次性的工作还是会多次发生?我只是试试
TADOQuery.CursorType := ctOpenForwardOnly,它可能会表现得尽可能好。如果性能确实不能令人满意,我会考虑一些本机连接组件(以避免 ADO 的开销)。 -
您最好的机会是不使用 ADO。为什么需要读取数百万条记录?导出它们?处理它们?很有可能您可以在不使用 ADO 的情况下做到这一点,顺便说一句,它不是性能最高的数据库访问库之一。您还必须优化您的查询,并检查数据库设置 - 瓶颈可能不是 ADO,而是服务器 I/O、数据库缓存等。首先确定什么是慢的,然后改进它。通常没有 FAST=TRUE 参数(© Tom Kyte)。
-
我已经在使用 ctOpenForwardOnly。而且我会经常发生,因为数据被读取和合并。不幸的是,必须使用 ADO。我对 CacheSize、LockType 和 ExecuteOptions 很好奇。
-
如果先在Oracle中合并,再导出呢?您可以避免的任何往返行程都会提高您的表现。
-
这是不可能的,因为需要许多计算/处理。