2015-03-24 5 views
0

У меня есть таблица со 100 000 записей. Я рассматриваю возможность использования транзакции для обновления данных. Будет один запрос, который обновит один столбец до нуля и приблизит 5000 обновлений, каждый из которых обновит одну запись.Операции со многими обновлениями

Каковы последствия памяти для этих крупных транзакций? Будут ли какие-либо существенные проблемы при выборе данных во время транзакции?


редактировать

  • таблицы InnoDB
  • это 1 + 5000updates
  • и записи обновляются по столбцам, что индексируется

Спасибо за ответы.

+1

Вы пробовали использовать это на своем сервере? Ответы были бы чистой спекуляцией, поскольку мы не знаем ваших спецификаций/архитектуры сервера и ваших настроек MySQL. – ajtrichards

+0

Предполагается, что эти 5000 обновлений выполняются в цикле, и в этом случае значения, записанные на каждой итерации, определяются программно? Если да, может ли эта программа не превращаться в выражение, которое может быть помещено в команду * single * 'UPDATE'? Похоже, вы пытаетесь использовать SQL как процедурный язык, когда он на самом деле является декларативным. – eggyal

+0

Да, эти обновления выполняются внутри цикла. Данные определяются из файла XML. Должен ли я использовать «случай, когда заканчивается»? Каким образом этот синтаксис сделает его лучше? – daemon

ответ

0

План A: 2 UPDATE заявления - 1 для нуля, один для другого 5000. Но, возможно, это не практично?

План B: (Не так эффективно, как План А) 5001 UPDATE заявления в одной транзакции (BEGIN...COMMIT)

План C: (очень медленно) автокоммит = 1, но не BEGIN..COMMIT

Отсутствует есть " памяти ". Тем не менее, желательно, чтобы innodb_buffer_pool_size установил около 70% от доступных ОЗУ.

Если все необходимые блоки кэшированы (это может быть десятки блоков или тысяч), то план A или B займет, возможно, несколько секунд. План C, вероятно, займет несколько минут, в зависимости от некоторых настроек innodb.

A SELECT не должно сильно влиять на любой из подходов. Там может быть ударом из-за взаимодействий замков на уровне строк. Вы будете , вероятно, не заметите удара.

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