Готовые заявления заметно замедляют программу? - PullRequest
6 голосов
/ 28 августа 2010

Я пишу программное обеспечение, которое требует от меня подготовки операторов и установки значений, выполнения запроса и получения результатов в цикле.Этот цикл может иметь более 7000 циклов.Если я использую простые операторы, а не подготовленные операторы, скорость выполнения сильно изменится?

Вот псевдокод

  1. Подготовка операторов
  2. Где-нибудь получить список
  3. Итерация по списку
  4. получение подготовленных операторов, выполнение запросов к базе данных и закрытие новых ресурсов, таких как наборы результатов.
  5. заполнение карты с использованием результата и значений изначальный список

Спасибо.

Ответы [ 4 ]

8 голосов
/ 28 августа 2010

Подготовленные операторы БЫСТРЕЕ, чем не подготовленные операторы, если вы неоднократно используете один и тот же оператор с несколькими наборами данных.Мне неизвестна ситуация, когда это не так.

После того, как вы подготовили инструкцию, она отправляется на сервер БД, который должен принимать данные только при каждом вызове -не нужно повторно обрабатывать оператор каждый раз, когда вы связываете новые данные.

Итак, простой ответ:

Нет.Они не.

4 голосов
/ 28 августа 2010

Только некоторые вещи, которые всплыли: убедитесь, что вы не создаете подготовленные операторы в своих циклах. Это связано с некоторыми накладными расходами, но окупается после 3-го запроса или около того. На самом деле с большим списком параметров это может быть даже быстрее для одного запроса.

Что-то, что значительно ускоряет процесс, - это выполнение всех ваших запросов в одной (или нескольких крупных) транзакциях. Если это большие наборы данных, вы можете выполнить до 1000 запросов на транзакцию или что-то подобное. (Конечно, семантика вашей доменной модели должна учитывать это, но по моему опыту, это почти всегда так).

Количество запросов, которые вы можете объединить в одну транзакцию, в некоторой степени зависит от базы данных, поэтому могут потребоваться некоторые эксперименты и чтение.

4 голосов
/ 28 августа 2010

Подготовленный оператор быстрее для повторяющихся задач.

http://download.oracle.com/javase/tutorial/jdbc/basics/prepared.html:

Если вы хотите выполнить объект Statement много раз, он обычно сокращает время выполнения доиспользуйте вместо этого объект PreparedStatement.

1 голос
/ 28 августа 2010

Вы также можете рассмотреть возможность получения нескольких значений для одного оператора:

SELECT id, value FROM table WHERE id IN (?, ?, ?, ?, ?, ?)

Это будет быстрее, чем отдельные запросы.

...