delphi FireDac FDTable延迟打开/获取记录

r1zhe5dt  于 2022-11-04  发布在  其他
关注(0)|答案(2)|浏览(241)

由于某些原因,我需要在 Delphi 项目中使用FDTable来获取大量的记录(Interbase数据库),不幸的是,打开FDTable需要太多的时间(最多2min,有时甚至更多),更糟糕的是当ApplyUpdate时,我尝试了一切可能通过改变获取选项:Recsmax、Rowsize、Mode等,如某些页面所述,例如:https://docwiki.embarcadero.com/RADStudio/Sydney/en/Fetching_Rows_(FireDAC)
将RecsMax选项设置为一个小值(50或100)对性能有很大帮助,但即使使用FetchAll,它也不会在应用Filter的情况下获取1条记录。正如我之前提到的,我需要使用FDtable来执行此操作,FDQuery不是一个选项,因为我们都知道处理查询更好。
是否有建议可以顺利打开并提取数据(100k+记录)?是否可以使用Filter + RecsMax提取记录?

uurv41yg

uurv41yg1#

查询表必须有主键。可以按如下方式配置TFDTable

FDTable1.FetchOptions.Items := [fiMeta];  // at least
  FDTable1.FetchOptions.Unidirectional := False;
  FDTable1.FetchOptions.CursorKind := ckAutomatic; // or ckDynamic
  FDTable1.CachedUpdates := False;
  // LiveWindowParanoic
  // When it is false there are problems with Locate and Recno
  FDTable1.FetchOptions.LiveWindowParanoic := False // Play with True/False.

这是实现最佳性能的配置

pobjuy32

pobjuy322#

FDTable组件主要用于BDE兼容性。
带有“select * from Table1”的FDQuery与使用FDTable完全相同,但是您可以在服务器端过滤结果集。
100k以上的记录需要传输大量的数据,blob增加了额外的开销,因为它们通常是分开获取的。我建议你重新考虑功能设计。

相关问题