Компоненты AnyDAC выполняют SQL-запрос медленнее, чем компоненты FIBPlus. - PullRequest
0 голосов
/ 09 апреля 2019

Следующая команда SQL возвращает приблизительно 4.500 записей и содержит целочисленные, строковые и двоичные (текстовые) значения.Все индексы установлены правильно.Кроме того, мы знаем, что предложение 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)

Мы выполнили команду SQL во внешнем приложении (из которого мы знаем, что это приложение использует FIBPlus компонентов) и в нашем самом простом примере Delphi7 (который использует оригинальные компоненты базы данных AnyDAC Версия 8.0.5).Если мы извлечем все записи в сетку, у нас будет следующая производительность:

  • Внешнее приложение с FIBPlus ~ 200 - 400 миллисекунд
  • Delphi7 с AnyDAC ~ 3.500 - 4.500 миллисекунд

В нашей программе на Delphi7 мы подключили TADQuery к его собственной TADTransaction .Настройки по умолчанию используются для обоих компонентов, кроме свойства ReadOnly в TADTransaction, которое мы изменили на True

Теперь мы задаемся вопросом, почему внешнее приложение работает примерно в 10 раз быстрее, чем наша программа Delphi7?Есть ли какие-либо свойства, которые мы можем изменить, чтобы ускорить нашу программу на Delphi 7?

Любая помощь приветствуется ...

...