Помимо подключения / отключения, в первом сценарии есть 5 вызовов базы данных (подготовка, выполнение, подготовка, выполнение, принятие) и 3 во втором (подготовка, выполнение, принятие).На самом деле это немного предвзято: для того, чтобы примеры были сопоставимыми, вам нужно было бы выполнить один и тот же оператор дважды в первом сценарии, следовательно, сохранить одну подготовку.Кроме того, как прокомментировал Andreas , некоторые драйверы могут не выполнять вызов базы данных для подготовки и вместо этого объединять его с первым выполнением.
В любом случае, концептуально, на меньшевызов базы данных во втором сценарии , чем в первом.
Транзакции являются серверной функциональностью.При использовании транзакций изменения в базе данных видны только сеансу, который их выполняет.Когда вызывается COMMIT
, они становятся постоянными и видимыми для других пользователей.С другой стороны, сеанс-владелец может выбрать ROLLBACK
, что в основном означает: я окончательно отказываюсь от изменений, которые я сделал со времени моего последнего COMMIT
.Вы можете видеть, что каждый из ваших фрагментов кода происходит в одной транзакции базы данных.С этой точки зрения они ничем не отличаются.
Каждый вызов от клиента к серверу требует одну обратную передачу по сети, что может быть дорогостоящим при выполнении множества небольших операций (скажем, куча INSERT
с).Именно здесь вступают в игру партии : они позволяют выполнять несколько операций за один вызов базы данных.В связи с этим второй фрагмент кода может масштабироваться лучше, поскольку он всегда будет выполнять одинаковое количество вызовов базы данных независимо от количества обрабатываемых записей.