powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / UPDATE с множеством ID
10 сообщений из 10, страница 1 из 1
UPDATE с множеством ID
    #40126565
vinn.consult
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

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

Код: plsql
1.
UPDATE 2_tbl_dev SET string = 'xxx' WHERE id = nnn



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

Код: plsql
1.
2.
3.
4.
5.
 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к за раз? есть ли какой-нибудь "современно быстрый" вариант?
...
Рейтинг: 0 / 0
UPDATE с множеством ID
    #40126573
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vinn.consult,

Вариантов много, но сначала нужно определиться откуда Вы берете данные для обновления?
...
Рейтинг: 0 / 0
UPDATE с множеством ID
    #40126580
vinn.consult
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergiiW,

Отдельный скрипт генерирует массив и через foreach сейчас делаются одиночные UPDATE
...
Рейтинг: 0 / 0
UPDATE с множеством ID
    #40126700
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vinn.consult,

Не понял. Он что генерирует случайные данные? Или все таки берет откуда то? Отуда?
Но не суть.
1. Можно сохранить в файл и уже с него грузить напрямую. Тут тоже есть два варианта с клиента грузить файл или с сервера. С сервера, естественно, будет быстрее, но может быть это уже будет не существенно.
2. Можно сохранить данные во временную таблицу, а уже с нее обновлять нужную таблицу.
3. Для быстроты можно еще временно отключить индексы и внешние ссылки.
...
Рейтинг: 0 / 0
UPDATE с множеством ID
    #40126736
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая точно версия MySQL?

Есть ли возможность управлять форматом представления данных?
...
Рейтинг: 0 / 0
UPDATE с множеством ID
    #40127012
vinn.consult
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

5.7.mysql_aurora.2.10.1

Не совсем понял про представление данных. Запросы на изменение могу сделать любыми, изначальную таблицу где меняются данные менять не могу.
...
Рейтинг: 0 / 0
UPDATE с множеством ID
    #40127014
vinn.consult
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergiiW,

Спасибо, но к сожалению эти варианты не подходят. Нужно или изменить запрос на выполнение или перепроектировать всю систему..
...
Рейтинг: 0 / 0
UPDATE с множеством ID
    #40127029
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW
Можно сохранить данные во временную таблицу, а уже с нее обновлять нужную таблицу.
Этот вариант мне наиболее симпатичен.
В доке даже готовый пример есть для апдейта:
https://dev.mysql.com/doc/refman/8.0/en/update.html
Код: sql
1.
2.
UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;
...
Рейтинг: 0 / 0
UPDATE с множеством ID
    #40127030
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vinn.consult
перепроектировать всю систему
всю или не всю, но от по-записного подхода надо отказываться, а то так и будет долго.
...
Рейтинг: 0 / 0
UPDATE с множеством ID
    #40127056
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример реализации:
Код: sql
1.
2.
3.
4.
5.
6.
-- Выполнить обновление
-- 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. Строковый поиск
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / UPDATE с множеством ID
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]