Я пытаюсь разработать микросервис Scala для управления данными для базы данных Oracle. Я использую драйверы JDBC для подключения к нему.
Читая ответы на вопросы о производительности драйвера JDBC по сравнению с .NET, я понял, что одним из наиболее эффективных способов настройки производительности чтения JDBC является установка размера выборки с помощью метода ResultSet.setFetchSize
.
Я попытался подключиться к базе данных Oracle, чтобы получить реальные данные для реального бизнес-случая с фиксированным числом записей, возвращаемых БД, и я измерил экспоненциальное поведение прошедшего времени. В частности, выборка 10000 строк из базы данных без установки размера выборки, что приводит к невероятно большому количеству времени выборки, но с указанием размера выборки, превышающего 1000, что приводит к небольшому выигранному времени (примерно 100 мс за 1 с).
Вот мои вопросы по этой теме:
Я полагаю, что слишком большое увеличение размера выборки потребовало бы ресурсы для получения небольшого выигрыша, поэтому существует ли даже грубый метод для оценки размера ResultSet до его фактической выборки? Я читал о следующей технике:
result.last();
result.getRow();
но это будет означать прокрутку всего ResultSet, и мне было интересно, есть ли хотя бы грубая точная методика для подсчета количества;
Я подсчитал, что хороший размер выборки будет составлять 1/10 от количества выбранных записей, но есть ли документированное правило, позволяющее автоматически оценить правильный размер выборки для наибольшего числа случаев?