Повысьте скорость или найдите более быструю альтернативу SQL Обновление - PullRequest
0 голосов
/ 19 марта 2020

На сервере MySQL имеется таблица 68 столбцов x 77 столбцов (general_table), которая содержит, помимо прочего, user_id, user_name, date и media_channel.

В редких случаях (83 тыс. Из них), где есть user_id, но не user_name, мы обнаружили бы, что значение для user_name равно "-". Я могу получить эту информацию из таблицы users_table.

Чтобы обновить значения в general_table, я использую следующую функцию обновления, но, учитывая размер таблицы, это занимает очень много времени, поэтому я ищем альтернативу.

UPDATE 
   general_table as a,
   users_table as b
   SET a.user_name = b.user_name 
   where a.date > '2020-01-01'
   and a.user_id = b.user_id
   and a.media_channel = b.media_channel
   and a.user_name = '-';

Также приветствуются ответы, использующие Pandas, Py MySQL или SQLAlchemy

Имейте в виду тех, кто запрашивает функцию объяснения, которая работает только для SELECT Запросы не обновляются.

1 Ответ

2 голосов
/ 19 марта 2020

Для этого запроса:

UPDATE general_table g
JOIN users_table u ON g.user_id = u.user_id AND g.media_channel = u.media_channel
SET g.user_name = u.user_name 
WHERE g.date > '2020-01-01' AND g.user_name = '-'

Требуются индексы для general_table(user_name, date, user_id, media_channel) и users_table(user_id, media_channel, user_name).

Примечание. Для обновления 83 тыс. Строк все равно потребуется некоторое время, поэтому Возможно, вы захотите сделать это партиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...