0

以下 SQL 命令返回大约 4.500 条记录,并包含整数、字符串和 blob(文本)值。所有索引都设置正确。此外,我们知道in子句不是最好的,但现在不应该打扰我们。SQL 命令在 firebird 3.0 服务器上执行:

Select
distinct O.Nr, O.Betreff, O.Text, O.Absenderadresse, O.Gelesen, O.Datum, O.Ordner, O.TextNotiz, M.ID, R.PosNr as RPosNr, R.AddressType, R.Address, R.Name, A.Nr as AttachmentNr, M.Bezeichnung as Mailordner, 0 as Archived

from Table1 O
  left join Table2 R on (R.Nr = O.IDNr)
  join Table3 M on (M.Nr = O.Ordner)
  and (M.PersonalNr=O.PersonalNr)
  left join Table4 A on (A.Nr = O.IDNr)

where (O.PersonalNr = 12)
and O.Ordner in (608,7440,7441,7444,6144,7091,5467,617,2751,710,6580,2812,609,7054,7194,7479,614,620,7030,615,3434,4883,619,6465,7613)

我们在外部应用程序(我们知道该应用程序使用FIBPlus组件)和我们非常基本的示例Delphi7 应用程序(使用原始AnyDAC数据库组件版本 8.0.5)中执行 SQL 命令。如果我们将所有记录提取到一个网格中,我们有以下性能:

  • 使用 FIBPlus 的外部应用程序 ~ 200 – 400 毫秒
  • 带 AnyDAC 的 Delphi7 ~ 3.500 – 4.500 毫秒

在我们的 Delphi7 程序中,我们将TADQuery连接到它自己的TADTransaction。两个组件都使用默认设置,除了 TADTransaction 的 ReadOnly 属性,我们将其更改为 True

现在我们想知道为什么外部应用程序比我们的 Delphi7 程序快大约 10 倍?有没有我们可以修改的属性来加速我们的 Delphi 7 程序?

任何帮助表示赞赏...

4

0 回答 0