Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 UPDATE с множеством ID  [new]
vinn.consult
Member

Откуда:
Сообщений: 39
Добрый день!

Есть много запросов, все ID и STRING разные:

UPDATE 2_tbl_dev SET string = 'xxx' WHERE id = nnn


Структура таблицы такая:

 CREATE TABLE `2_tbl_dev` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `string` varchar(150) NOT NULL
  PRIMARY KEY (`id`)
) ENGINE=InnoDB


В базе 10 млн записей, памяти на сервере 4gb. Если обновлять по одному ID уходит очень много времени (5 часов), не могу "догнать" как сделать быстрее. Или менять в памяти, делать дамп, а потом загружать? или транзакции по 20-30к за раз? есть ли какой-нибудь "современно быстрый" вариант?
14 янв 22, 13:16    [22420985]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE с множеством ID  [new]
SergiiW
Member

Откуда:
Сообщений: 139
vinn.consult,

Вариантов много, но сначала нужно определиться откуда Вы берете данные для обновления?
14 янв 22, 13:30    [22421002]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE с множеством ID  [new]
vinn.consult
Member

Откуда:
Сообщений: 39
SergiiW,

Отдельный скрипт генерирует массив и через foreach сейчас делаются одиночные UPDATE
14 янв 22, 13:43    [22421014]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE с множеством ID  [new]
SergiiW
Member

Откуда:
Сообщений: 139
vinn.consult,

Не понял. Он что генерирует случайные данные? Или все таки берет откуда то? Отуда?
Но не суть.
1. Можно сохранить в файл и уже с него грузить напрямую. Тут тоже есть два варианта с клиента грузить файл или с сервера. С сервера, естественно, будет быстрее, но может быть это уже будет не существенно.
2. Можно сохранить данные во временную таблицу, а уже с нее обновлять нужную таблицу.
3. Для быстроты можно еще временно отключить индексы и внешние ссылки.

Сообщение было отредактировано: 14 янв 22, 17:39
14 янв 22, 17:38    [22421238]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE с множеством ID  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21582
Какая точно версия MySQL?

Есть ли возможность управлять форматом представления данных?
14 янв 22, 20:27    [22421309]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE с множеством ID  [new]
vinn.consult
Member

Откуда:
Сообщений: 39
Akina,

5.7.mysql_aurora.2.10.1

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

Сообщение было отредактировано: 16 янв 22, 12:56
16 янв 22, 12:54    [22421801]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE с множеством ID  [new]
vinn.consult
Member

Откуда:
Сообщений: 39
SergiiW,

Спасибо, но к сожалению эти варианты не подходят. Нужно или изменить запрос на выполнение или перепроектировать всю систему..
16 янв 22, 12:57    [22421803]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE с множеством ID  [new]
miksoft
Member

Откуда:
Сообщений: 38948
SergiiW
Можно сохранить данные во временную таблицу, а уже с нее обновлять нужную таблицу.
Этот вариант мне наиболее симпатичен.
В доке даже готовый пример есть для апдейта:
https://dev.mysql.com/doc/refman/8.0/en/update.html
UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;
16 янв 22, 14:38    [22421824]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE с множеством ID  [new]
miksoft
Member

Откуда:
Сообщений: 38948
vinn.consult
перепроектировать всю систему
всю или не всю, но от по-записного подхода надо отказываться, а то так и будет долго.
16 янв 22, 14:40    [22421825]     Ответить | Цитировать Сообщить модератору
 Re: UPDATE с множеством ID  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21582
Пример реализации:
-- Выполнить обновление
-- Id:     123     , 456     , 789
-- String: 'qwerty', 'asdfgh', 'zxcvbn'

UPDATE 2_tbl_dev 
SET string = COALESCE(ELT(FIND_IN_SET(2_tbl_dev.id, '123,456,789'), 'qwerty','asdfgh','zxcvbn'), string);

DEMO fiddle

Недостатки:

1. Полное сканирование таблицы
2. Строковый поиск
16 янв 22, 18:46    [22421875]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить