Обновить несколько тысяч строк в Mysql

fazan

Client
Регистрация
25.12.2014
Сообщения
97
Благодарностей
9
Баллы
8
Всем привет. Есть таблица MYSQL со следующими столбцами: ID|Дата|Ссылка
Пример содержимого: 25453|2021-12-01|https://www.avito.ru/garbolovo/kvartiry/2-k._kvartira_57m_55et._2280085055
В таблице может быть несколько десятков тысяч строк.
Есть список в котором построчно записаны "хвостики" объявлений, например "_2280085055". Строк в нем может быть несколько десятков тысяч.
Задача: наиболее оптимальным образом обновить дату на дату из переменной для строк в столбце "Ссылка" у которых содержится хвостик из списка.
Сделал так:
из хвостиков формирую запрос типа:
UPDATE `new` SET `date`='2022-02-02' WHERE `ssylka` LIKE "%первый_хвостик";UPDATE `new` SET `date_proverka`='2022-02-02' WHERE `ssylka` LIKE "%_второй_хвостик"; ****** и так далее

Вставляю этот длиннющий запрос в HeidiSQL, данные медленно, но обновляются.
При попытке выполнить запрос в экшене получаю ошибку "
Выполнение действия Db Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding."

Столбец "ssylka"с индексом.
Подскажите пожалуйста, как решить мою задачу наиболее оптимальным образом?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
выноси хвост в отдельную колонку
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
или просто поруби свой список запросов на куски
 
  • Спасибо
Реакции: fazan

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 631
Благодарностей
1 227
Баллы
113
или просто поруби свой список запросов на куски
Поддерживаю. Когда несколько лет назад появился кубик работы с БД все интернет-магазины свои стал зенкой обновлять. Тоже сперва массово грузил. В итоге тормозило и порой вылетало по таймауту. Потом конечный список запросов стал дробить на подсписки в 500 строк (количество можешь подобрать под себя, свою бд и своего хостера) и лить по очереди, с учетом индексов все происходит практически мгновенно.
 
  • Спасибо
Реакции: fazan

uuw

Client
Регистрация
04.06.2020
Сообщения
146
Благодарностей
54
Баллы
28
выноси хвост в отдельную колонку
с индексом по нему, ну и запрос без уторможенного LIKE
UPDATE `new` SET `date`='2022-02-02' WHERE `hvost` = "первый_хвостик";

Как правильно выше написали - пакетами.
 
  • Спасибо
Реакции: fazan

fazan

Client
Регистрация
25.12.2014
Сообщения
97
Благодарностей
9
Баллы
8
или просто поруби свой список запросов на куски
с индексом по нему, ну и запрос без уторможенного LIKE
UPDATE `new` SET `date`='2022-02-02' WHERE `hvost` = "первый_хвостик";

Как правильно выше написали - пакетами.
Поддерживаю. Когда несколько лет назад появился кубик работы с БД все интернет-магазины свои стал зенкой обновлять. Тоже сперва массово грузил. В итоге тормозило и порой вылетало по таймауту. Потом конечный список запросов стал дробить на подсписки в 500 строк (количество можешь подобрать под себя, свою бд и своего хостера) и лить по очереди, с учетом индексов все происходит практически мгновенно.
Всем спасибо. Буду пробовать.
 

vermishelka

Новичок
Регистрация
19.05.2021
Сообщения
10
Благодарностей
0
Баллы
1
сделай конец отдельной колонкой с числовым типом и индексом + запрос insert on duplicate key update
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)