gpt4 book ai didi

delphi - 快速读取 Nexus 数据库表

转载 作者:行者123 更新时间:2023-12-03 15:09:38 24 4
gpt4 key购买 nike

我想尽快将表的全部内容读入内存。我正在使用 Nexus 数据库,但我可能可以使用一些适用于 Delphi 中所有数据库类型的技术。

我正在查看的表有 60,000 条记录,20 列。所以不是一个巨大的数据集。

根据我的分析,到目前为止我发现了以下内容:

  • 直接使用 TnxTable 访问表并不比使用 SQL 查询和“SELECT * FROM TableName”更快或更慢

  • 循环遍历行的简单操作(无需实际读取或复制任何数据)占用了大部分时间。

我得到的性能是

  • 循环遍历所有记录需要 3.5 秒
  • 循环遍历所有记录、读取值并存储它们,需要 3.7 秒(即仅多出 0.2 秒)

我的代码示例

var query:TnxQuery;
begin
query.SQL.Text:='SELECT * FROM TableName';
query.Active:=True;

while not query.Eof do
query.Next;

对于 60,000 行的表,这需要 3.5 秒。

这样的表现听起来合理吗?我可以采取其他方法让我更快地读取数据吗?

我当前正在从同一台计算机上的服务器读取数据,但最终可能来自 LAN 上的另一台服务器。

最佳答案

您应该将 BlockRead 模式与 TnxTable 结合使用,以获得最佳读取速度:

nxTable.BlockReadOptions := [gboBlobs, gboBookmarks];
//leave out gboBlobs if you want to access blobs only as needed
//leave out gboBookmarks if no bookmark support is required

nxTable.BlockReadSize := 1024*1024; //1MB
// setting block read size performs an implicit First
// while block read mode is active only calls to Next and First are allowed for navigation
try
while not nxTable.Eof do begin
// do something....
nxTable.Next;
end;
finally
nxTable.BlockReadSize := 0;
end;

此外,如果您不需要在特定索引上设置范围,请确保使用顺序访问索引以获得最快的访问速度。

关于delphi - 快速读取 Nexus 数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5797843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com