次の 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 に接続しました。True に変更した TADTransaction の ReadOnly プロパティを除いて、デフォルト設定が両方のコンポーネントに使用されます。
外部アプリケーションが Delphi7 プログラムよりも約 10 倍高速なのはなぜでしょうか。Delphi 7 プログラムを高速化するために変更できるプロパティはありますか?
どんな助けでも大歓迎です...