Известна ли проблема, что, когда пользователь устанавливает драйверы fetchSize для драйверов JDB C, первый поиск выполняется медленнее, а последующие вызовы - быстрыми? - PullRequest
0 голосов
/ 23 апреля 2020
try (Connection connection = DriverFactory.getConnectionForDriver(driverType); PreparedStatement ps = connection.prepareStatement(PAGE_QUERY)) {
    ConnectionStopWatch watch = new ConnectionStopWatch().start();
    ResultSet rs = ps.executeQuery();
    rs.setFetchSize(userFetchSize);
    while (rs.next()) {
        rs.getString(2);
        rowCount++;
    }
    watch.stop();
} catch (Exception e) {
    e.printStackTrace();
}

Это тестовый пример, который я написал, чтобы проверить, выполнено ли fetchSize или нет. Во всех случаях rowCount был исправлен для конкретного драйвера. Новый объект подключения используется каждый раз. Ниже приведены выходные данные для вышеуказанного фрагмента теста:

---------------------------------------------------
          DRIVER      ROWS      TIME IN MS     FETCH SIZE
---------------------------------------------------
           MSSQL     90276             519     10000
---------------------------------------------------
           MSSQL     90276             433     10000
---------------------------------------------------
           MSSQL     90276             437     10000
---------------------------------------------------
           MSSQL     90276             434     10000
---------------------------------------------------
           OJDBC       389              73     10000
---------------------------------------------------
           OJDBC       389               9     10000
---------------------------------------------------
           OJDBC       389               8     10000
---------------------------------------------------
           OJDBC       389               8     10000
---------------------------------------------------

Использование Oracle 12 и SQL Server 2017. Не вызывает ли последующее получение некоторое кэширование в конце базы данных? Или fetchSize применяется после первой выборки на этой таблице? Я попытался установить fetchSize на PreparedStatement, но получил тот же результат. Запрос представляет собой простой выбор звезды из таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...