Многие рабочие нагрузки баз данных связаны с ЦП, а не с IO. Это означает, что база данных тратит больше времени на выполнение работы, такой как анализ SQL-запросов и выяснение того, как их обрабатывать (выполнение «плана выполнения»), чем тратит доступ к диску. Это в большей степени относится к «транзакционным» рабочим нагрузкам, чем к «отчетным» рабочим нагрузкам, но в обоих случаях время, потраченное на подготовку плана, может оказаться больше, чем вы ожидаете.
Таким образом, это всегда хорошая идея, если оператор будет выполняться часто, и хлопоты по созданию (правильных) механизмов для кэширования PreparedStatements «между вызовами методов» стоят вашего времени разработчика. Как и в случае с производительностью, измерение является ключевым фактором, но если вы можете сделать это достаточно дешево, кэшируйте свое PreparedStatement по привычке.
Некоторые драйверы JDBC и / или пулы соединений предлагают прозрачное «подготовленное кэширование операторов», поэтому вам не придется делать это самостоятельно. До тех пор, пока вы понимаете поведение выбранной вами стратегии прозрачного кэширования, можно позволить ей отслеживать вещи ... чего вы действительно хотите избежать, так это попадания в базу данных.