Кэш PreparedStatement для каждого соединения или пусть пул соединений обрабатывает это? - PullRequest
5 голосов
/ 19 января 2011

Какая стратегия кэширования быстрее и на сколько?

1) Пул PreparedStatement (по пулу соединений).Нет кэширования приложением.

for (int i=0; i<1000; i++) {
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setObject(1, someValue);
    preparedStatement.executeQuery();
    preparedStatement.close();
}

2) Кэширование на уровне приложения.Нет пула PreparedStatement.

PreparedStatement preparedStatement = connection.prepareStatement(sql);
for (int i=0; i<1000; i++) {
    preparedStatement.clearParameters();
    preparedStatement.setObject(1, someValue);
    preparedStatement.executeQuery();
}
preparedStatement.close();

Этот вопрос похож на Повторное использование PreparedStatement несколько раз , за исключением того, что я ожидаю конкретных результатов тестов, а также учитываю пул PreparedStatement.

http://drupal.org/node/550124#comment-2224630, кажется, указывает, что кэширование на уровне приложений более эффективно, чем пул PreparedStatement, но разница незначительна.Я хотел бы увидеть больше тестов, прежде чем принять решение.

1 Ответ

0 голосов
/ 09 октября 2018

Кэширование на уровне приложения будет намного более эффективным, особенно если вы запустите эти выполнения.

Даже при использовании пула соединений, объем служебных данных сети, необходимых для того, чтобы соединение было готовым (обратно и четвертое подтверждение) и закрывалось каждый раз, делает его не только медленнее, но и увеличивает стоимость уровня ЦП на обоих серверах SQLи клиентский сервер.

...