簡體   English   中英

FireDac FDTable 延遲打開/獲取記錄

[英]FireDac FDTable Delay Open/Fetch records

出於某種原因,我需要在 Delphi 項目中使用 FDTable 來獲取大量記錄(Interbase 數據庫),不幸的是,打開 FDTable 需要花費太多時間(長達 2 分鍾,有時甚至更多),更糟糕的是,當應用更新時,我通過更改獲取選項嘗試了一切可能:Recsmax、Rowsize、Mode 等,如某些頁面上所述,例如: https://docwiki.embarcadero.com/RADStudio/Sydney/en/Fetching_Rows_(FireDAC)

將 RecsMax 選項設置為一個較小的值(50 或 100)對性能有很大幫助,但即使使用 FetchAll,它也不會在應用過濾器的情況下獲取 1 條記錄。 正如我在需要使用 FDtable 執行此操作之前提到的,FDQuery 不是一個選項,因為我們都知道處理查詢更好。

是否有平滑打開和獲取數據(100k+ 條記錄)的建議? 可以使用Filter + RecsMax 獲取記錄嗎?

查詢表必須有主鍵。 您可以按如下方式配置 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.

這是最佳性能的配置

FDTable 組件主要用於 BDE 兼容性。

帶有“select * from Table1”的 FDQuery 與使用 FDTable 完全相同,但您可以在服務器端過濾結果集。

100k+ 條記錄是要傳輸的大量數據,blob 會增加額外的開銷,因為它們通常是單獨獲取的。 我建議你重新考慮功能設計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM