标签: nexusdb

快速读取Nexus数据库表

我想尽快将表的全部内容读入内存.我正在使用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上的另一台服务器.

delphi nexusdb

5
推荐指数
1
解决办法
1994
查看次数

在TQuery结果集中查找记录的最快方法

我想知道最好的(最快的)读取方式是在Tquery SQL语句的结果集中查找记录。

到目前为止,我一直在使用TQuery.Locate,如果我是对的,那是唯一可用于在结果集中搜索的语句。那么我们如何优化呢?

我有一些想法,但还没有时间在大型数据集上进行比较:

假设我们有一个包含以下字段的表:

Create Table aTable (
 ID int, 
 Name1 varchar(50), 
 Name2 varchar(50));
Run Code Online (Sandbox Code Playgroud)

和以下查询:

SELECT ID, Name1, Name2 from aTable
Run Code Online (Sandbox Code Playgroud)

我们想通过记录的ID在结果集中找到记录

  • 如果aTable在ID上有索引,定位会更快吗?
  • 如果在SQL语句中添加“按ID排序”,定位会更快吗?

有什么想法吗?

[编辑]澄清此用法:查询由Reportbuilder数据视图执行,然后通过数据管道(即TQuery.Dataset)使其可用。在自定义报告中,我需要根据一些更高级别的ID来传递管道。因此,不使用查询不适用于此处。我只是想知道我上面的任何建议是否可以加快速度。

delphi reportbuilder nexusdb

5
推荐指数
1
解决办法
7160
查看次数

Firebird或NexusDB

我知道有很多可用的Delphi数据库相关问题,但我只考虑这两个数据库.我需要查询大约100.000条记录.

根据您的经验,哪一个更快:

  • 嵌入式
  • 作为C/S.

谢谢.

delphi firebird nexusdb

4
推荐指数
1
解决办法
2078
查看次数

标签 统计

delphi ×3

nexusdb ×3

firebird ×1

reportbuilder ×1