Универсального ответа нет. Я лично реализовывал оба решения десятки раз.
Это зависит от того, что для вас важнее: память или сетевой трафик.
Если у вас быстрое сетевое соединение (LAN
) и плохой клиентский компьютер, то строка за строкой извлекает данные с сервера.
Если вы работаете над Internet
, то пакетная выборка вам поможет.
Вы можете установить количество предварительных выборок или свойства слоя базы данных и найти золотое сечение.
Правило большого пальца: извлекайте все, что можете, не замечая этого
Если вам нужен более подробный анализ, в этом участвуют шесть факторов:
- Время отклика / скорость генерации строки (как скоро
Oracle
генерирует первую строку / последнюю строку)
- Время доставки строки ответа / скорость (как скоро вы можете получить первый ряд / последний ряд)
- Время отклика на обработку строки / скорость (как скоро вы сможете показать первую строку / последнюю строку)
Одним из них будет узкое место.
Как правило, rate
и responce time
являются антагонистами.
С помощью предварительной выборки вы можете контролировать время отклика доставки строк и скорость доставки строк : большее количество предварительных выборок увеличит скорость, но уменьшит время отклика, меньшее количество предварительных выборок сделает противоположное.
Выберите, какой из них важнее для вас.
Вы также можете сделать следующее: создать отдельные потоки для выборки и обработки.
Выберите только несколько строк, чтобы пользователь был удивлен в режиме низкой предварительной выборки (с большим временем отклика), затем переключитесь в режим высокой предварительной выборки.
Он будет извлекать строки в фоновом режиме, и вы можете обрабатывать их также в фоновом режиме, пока пользователь просматривает первые строки.