快速读取Nexus数据库表

awm*_*oss 5 delphi nexusdb

我想尽快将表的全部内容读入内存.我正在使用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;
Run Code Online (Sandbox Code Playgroud)

这在60,000行表上需要3.5秒.

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

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

Tho*_*ler 7

您应该使用带有TnxTable的BlockRead模式以获得最佳读取速度:

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;
Run Code Online (Sandbox Code Playgroud)

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