2015-04-13 2 views
0

Практически или возможно, чтобы ОБНОВИТЬ несколько сотен строк сразу, или есть метод для пакетного обновления, о котором я не знаю?MySQL: обновите сотни строк сразу?

Я сделал Google для этого вопроса, но он продолжает бросать результаты для объединения нескольких запросов UPDATE в один.

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

+0

Сделки ....? – JuniorCompressor

+0

какой вид обновления? Что-то вроде 'UPDATE test SET x = 1' или определенное значение для каждой строки? – dognose

+0

@JuniorCompressor, я буду использовать транзакции в рамках, если это то, что вы имеете в виду. –

ответ

1

300 заявлений об обновлении не должно быть проблемой. Вы просто использовать update:

update table t 
    set . . . 
    where . . . 

Это может быть проблемой, если вы были очень сложные триггеры на столе.

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

+0

Гордон, спасибо. Я должен буду вскочить и дать ему возможность, чтобы посмотреть, что произойдет. Но, если вы предлагаете, низкие сотни жизнеспособны, то я не должен (и я надеюсь, что нет) иметь какие-либо проблемы. –

+0

@WayneSmallman. , , Я также должен добавить, что если у вас очень высокие объемы транзакций, обновление может замедлить работу системы в течение нескольких секунд, что может вызвать проблемы. –

1

300+ ничего, Мы обновляем около 80k записей в одном из заданий синхронизации, и это в основном делается через присоединиться как этот

UPDATE table_1 
       INNER JOIN table_2 ON (table_1.DnameId = table_2.DNDOMAIN_ID) 
       SET 
       table_1.Label = table_2.DOMAIN_LABEL, 
       table_1.Extension = table_2.DOMAIN_EXTENSION 

В вашем случае,

update table_name set column='value' 

будет работать бесперебойно ,

1

300 заявлений могут не выглядеть проблемой, но если у вас есть строгие соглашения об уровне обслуживания, вы должны искать оптимизацию решения. Поскольку нет никакой доступной информации, какова природа исполнения (это пакетная работа? Онлайн-запрос или что-то еще), я рекомендую вам рассмотреть следующие подходы перед реализацией логики.

  1. Вызов более 300 операторов внутри одной транзакции лучше, чем транзакция за запрос. Если характер требования не требует изолированной транзакции для каждого запроса, я предлагаю вам лучше иметь одну транзакцию для всех. Но помните, что есть один улов, если одна из записей не удалась, все данные, обновленные до этого момента, также будут откатны.
  2. Использовать собственный обновитель, насколько это возможно при работе с массовыми данными, и данные могут быть доступны с использованием файлов, например. LOAD DATA INFILE
  3. Проверьте, есть ли в таблице триггеры, которые вступают в действие, как только данные обновляются. Это существенно повлияет на выполнение запроса.
Смежные вопросы