Нужно ли ZeosLib DataSets выполнять метод FetchAll, чтобы возвращать реальные реальные итоговые строки?

В базах данных Firebird/Interbase мы имеем TIBQuery, TIBTable а также TIBDataSet, которые имеют FetchAll метод подсчета количества строк в этом наборе данных. Если мы не вызываем этот метод, эти наборы данных регистрируются как "общее" количество строк, которые пользователь уже видел TDBGrid или же TDBNavigator, Эту "сумму" можно получить, вызвав метод RecordCount для этих наборов данных.

Другой (гораздо более эффективный) способ получить реальное общее количество строк, получить отдельный набор данных и выполнить некоторые SELECT COUNT(*) FROM TABLE_NAME и применять любые фильтры, которые нам нравятся. Это нормально, безусловно.

Но теперь, когда я работаю с MySQL через ZeosLib, мне стало интересно, нужно ли мне иметь такую ​​проблему, чтобы поместить второй запрос в память.

Мы знаем, что ZeosLib делает свои запросы и может внутренне возвращать статистику этого запроса, которая включает количество возвращаемых строк.

Помещает ли ZeosLib эту информацию в RecordCount или он работает так же, как Interbase Components?

1 ответ

Решение
  1. Zeos возвращает количество уже извлеченных записей. Не учитывает примененные фильтры и не делает FetchAll перед возвращением RecordCount,
  2. SELECT COUNT(*) ... не намного более эффективен, поскольку создает дополнительную нагрузку на сервер, которая иногда может быть равна рабочей нагрузке для выполнения исходного запроса.
  3. В общем, библиотека доступа к данным может предлагать 3 режима вычисления количества записей: количество выбранных строк, количество видимых строк (как в первую очередь, но после применения фильтров) и SELECT COUNT(*), FetchAll или нет FetchAll будет лучше контролировать явно. Вот как это делается в AnyDAC ( подробнее).
Другие вопросы по тегам