Оптимизация InnoDB - «использовать транзакции при обновлении» - почему? - PullRequest
5 голосов
/ 13 декабря 2010

Я читал этот пост в блоге производительности MySQL.

При настройке приложения он говорит:

Сначала убедитесь, что вы используете транзакции,выполнение обновлений

В настоящее время я использую транзакции только в тех местах, где имеется несколько вставок или обновлений одновременно.то есть более одной таблицы.

Должен ли я поэтому изменить каждый UPDATE, чтобы превратить его в транзакцию?

В чем разница между:

prepare sql
bind params
commit

и:

begin transaction
prepare sql
bind params
execute statement
commit transaction

с точки зрения того, что происходит на уровне базы данных, что делает одно быстрее другого?

1 Ответ

6 голосов
/ 13 декабря 2010

InnoDB по умолчанию работает в режиме автоматической фиксации. Это означает, что каждый запрос выполняется в своей собственной транзакции и получает подтверждение сразу. В InnoDB это означает запись данных в два места на диске (не спрашивайте меня о подробностях - я пишу из памяти то, что прочитал в MySQL Performance Blog один раз;)).

Теперь, если вы делаете по одному обновлению / вставке / удалению за раз, производительность не сильно возрастет. Однако, если вы делаете несколько последовательных обновлений / вставок / удалений, вы можете сэкономить некоторое время на жестком диске, связав их в транзакцию, а затем зафиксировав все сразу.

...