2016-01-06 2 views
0

Полезно ли использовать Подготовленный оператор для SELECT SQL с пулом соединений. (В моем случае я использую пул соединений Tomcat JDBC).
Подготовленный оператор для выбора SQL с пулом соединений

это добавить ли какие-либо преимущества (скорость окна) или она будет добавить накладные расходы для поддержания Подготовленные заявления, связи и сохранить их живыми или отслеживать ли закрыты, как Обобщённые соединения сохраняются внутри и они закрываются в соответствии с различными параметрами as specified here.

Я использую DataSource, чтобы получить соединение, база данных MariaDB.

При чтении различных posts, documentations и примеры большинство Prepared Statement были построены с использованием INSERT или UPDATE запросов. Означает ли это, что для SELECT он не добавит никакого преимущества?

+1

Используйте 'PreparedStatement', когда вам имеют динамические запросы. –

+0

Вы спрашиваете о пуле соединений или подготовленных заявлениях? – shmosel

+0

@shmosel Подготовленные утверждения по объединенным соединениям – dbw

ответ

1

Отчеты, подготовленные компанией MariaDB/MySQL, не имеют каких-либо преимуществ, когда дело доходит до разбора/оптимизации запросов, план запроса не сохраняется, как в некоторых других базах данных SQL.

У них есть преимущество в производительности, когда дело доходит до передачи наборов результатов, поскольку значения столбцов могут передаваться в двоичной форме и сразу же сохраняться в переменных результата. С помощью классических незаготовленных операторов все поля результатов преобразуются в текстовую форму на стороне сервера. Это добавляет время обработки на стороне сервера, приводит к большему количеству байтов, которые должны быть переданы по проводу, и в зависимости от вашего приложения клиентская сторона может нуждаться в преобразовании значений обратно из текстовой в двоичную форму (например, для значений integer и float).

Другая причина для использования подготовленных заявлений, а также было отмечено в предыдущих комментариях, в том, что она является надежным способом предотвращения инъекции SQL, и это относится к ВЫБРАТЬ, а также INSERT/UPDATE/DELETE

1

Это хорошо использовать PreparedStatement, если вы можете:

  • Предотвратить SQLInjection
  • Аннотация Дата представления/Время
  • Сделка с Charset преобразования
  • читаемость (вы видите одну строку с полным SQL)
  • Поскольку SQL остается постоянной (с?) База данных может кэшировать план и не должны повторной обработки

В случае SELECT основной фокус причины лежат с параметрами, переданными в состояние WHERE.

Что касается производительности: это может зависеть - но я никогда не испытывал PreparedStatement s, чтобы быть значительно хуже, чем просто Statement s - если закодировано правильно.

Тот факт, что вы находитесь Объединение соединений не добавляет многого к этому. Концепция как-то «подготовка всех утверждений, которые вам понадобятся в этом соединении для последующего», не означает, что PreparedStatments предназначены для использования.Это прекрасно, чтобы подготовить такое же крошечное заявление снова и снова и снова - Altough, если сталкиваются с петлей INSERT с или UPDATE ы было бы целесообразно повторно использовать PreparedStatement и/или партию в INSERT сек

+0

Как это работает с конверсиями Charset? –

+0

Поддерживая NVARCHAR так же, как и Varchar seters - вам будет сложно правильно кодировать строку, переданную в Statement, иначе – Jan

+0

В MariaDB/MySQL 'NVARCHAR' является просто синонимом' VARCHAR'. Откуда взялась кодировка? –

Смежные вопросы