Firebird 2.0 транзакция ВЫБРАТЬ производительность - PullRequest
2 голосов
/ 29 октября 2009

В Firebird 2.0 быстрее использует явную транзакцию для команды SELECT, чем для выполнения команды с неявной?

Ответы [ 6 ]

3 голосов
/ 29 октября 2009

Все команды SQL (SELECT, INSERT, UPDATE и т. Д.) Могут быть выполнены ТОЛЬКО в рамках какой-либо транзакции. Вы не можете запустить команду без транзакции, запущенной до нее.

2 голосов
/ 21 мая 2010

Явные и неявные транзакции - это функция набора компонентов, которую вы используете для доступа к базе данных, а не функция самого Firebird. Как упоминалось ранее, Firebird всегда делает все внутри транзакции. Это имеет несколько последствий для вас:

  • Использование «неявной» транзакции не может быть быстрее, чем использование «явной» транзакции, поскольку с точки зрения Firebird транзакция является транзакцией, не имеет значения, кто ее запустил.
  • Для достижения наилучшей производительности иногда требуется точный контроль над «коммитами». В то время как «неявная» транзакция не может быть быстрее, чем «явная» транзакция, явная может быть быстрее, потому что вы можете контролировать свои StartTransactions и Commits. Хотя обычно вы хотите выполнить все обновления базы данных в рамках одной транзакции (чтобы все они выполнялись успешно или не сработали как набор), иногда требуется разделить операции на несколько групп: если вам нужно выполнить массовую вставку множества записей, вы, вероятно, захотите Зафиксировать одну каждые 1000 записей или около того.
1 голос
/ 16 мая 2010

Кроме того, что уже было сказано, учтите, что транзакция может быть:

  • чтение и запись
  • Read-Only

Для SELECT лучше всего использовать транзакцию только для чтения.

PS: существуют другие типы транзакций, но эти два являются важными для этой темы.

1 голос
/ 30 октября 2009

Firebird не может выполнять команды SQL без транзакции.

PS: Вы получаете лучшие результаты производительности, если совершаете транзакции, а не откатываете их назад. Даже если вы только позвонили в SELECT и ничего не изменили.

0 голосов
/ 18 августа 2015

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

Но я бы порекомендовал использовать явные транзакции, так как сохранение фиксации может вызвать дальнейшее горе, если оно блокирует слишком много транзакций. Если это произойдет, то доступ к Firebird может значительно замедлиться, поскольку он проходит через все задержанные / заблокированные транзакции, чтобы определить правильное значение данных.

Вот некоторые обсуждения этого вопроса

http://forums.devshed.com/firebird-sql-development-61/difference-active-transaction-863103.html

http://www.slideshare.net/ibsurgeon/3-how-transactionswork

0 голосов
/ 29 октября 2009

Обычно транзакция добавляет некоторые накладные расходы. Однако следует соблюдать осторожность, если у вас не запущена транзакция по умолчанию при подключении к Firebird.

...