Форум об интернет-маркетинге
Вернуться   Форум об интернет-маркетинге > Технические вопросы > Веб-строительство

Ответ
 
Опции темы
Старый 20.12.2020, 16:32   #11
Sitealert
Слесарь-сайтосборщик
Доцент
 
Регистрация: 22.06.2020
Адрес: Замкадье
Сообщений: 403
Сказал(а) спасибо: 985
Получил(а) "Спасибо": 1,178
Нарушения: 0/0 (0)
Репутация: 180645

По умолчанию Re: MySQL replace

Цитата:
Сообщение от sanek1991 Посмотреть сообщение
Только в условие я добавлял BETWEEN
Не надо BETWEEN. Попробуй так, как у меня написано.
Код:
UPDATE table_name SET field_name=REGEXP_REPLACE(field_name, '\\[.*?\\]', '') WHERE content_id>99999 AND content_id<200000

Последний раз редактировалось Sitealert; 20.12.2020 в 16:48.
Sitealert вне форума   Ответить с цитированием
Старый 20.12.2020, 16:42   #12
sanek1991
Senior Member
Профессор
 
Регистрация: 21.06.2020
Сообщений: 859
Сказал(а) спасибо: 80
Получил(а) "Спасибо": 187
Нарушения: 0/0 (0)
Репутация: 74780

Thread Starter Re: MySQL replace

В принципе то же самое время - 6.7 сек с условием для одной записи
WHERE content_id = 6094079

Текст обрабатывает корректно, но время что-то не того.
Сервер 4 ядра, 16 GB озу
Проблем со скоростью работы БД не наблюдалось
sanek1991 вне форума   Ответить с цитированием
Старый 20.12.2020, 16:50   #13
XPraptor
Думаю, что надо худеть
Академик
 
Аватар для XPraptor
 
Регистрация: 22.06.2020
Сообщений: 1,791
Сказал(а) спасибо: 1,526
Получил(а) "Спасибо": 1,939
Нарушения: 0/0 (0)
Репутация: 608321

По умолчанию Re: MySQL replace

sanek1991, эта операция очень затратна, если большая таблица - так делать не надо.
Надо через php тоже регулярное выражение прогнать (preg_replace) с лимитами по 5-10 тысяч строк за раз.

Тут для скорости вообще нужно схитрить, создать таблицу временную с одним полем для этого текста и ключем как ключ основной талицы.
При проходе php, выбрать только ключ и это поле текста (SELECT key, text FROM...) записывать результат изменения в эту временную таблицу и по окончании сделать вставку в основную:
Код:
INSERT INTO table_name (key, text) SELECT key, text FROM table_temp ON DUPLICATE KEY UPDATE table_name.text=table_temp.text
Состояние бота google и полезные ресурсы: всё про гугл
XPraptor вне форума   Ответить с цитированием
Старый 20.12.2020, 16:51   #14
Sitealert
Слесарь-сайтосборщик
Доцент
 
Регистрация: 22.06.2020
Адрес: Замкадье
Сообщений: 403
Сказал(а) спасибо: 985
Получил(а) "Спасибо": 1,178
Нарушения: 0/0 (0)
Репутация: 180645

По умолчанию Re: MySQL replace

XPraptor, какие там затраты для одной строки таблицы?
Сама операция UPDATE медленная, но мне непонятно, почему на простом REPLACE не тормозит. Для одной строки разница должна быть несущественной, с регуляркой или без регулярки.
Sitealert вне форума   Ответить с цитированием
Старый 20.12.2020, 17:04   #15
sanek1991
Senior Member
Профессор
 
Регистрация: 21.06.2020
Сообщений: 859
Сказал(а) спасибо: 80
Получил(а) "Спасибо": 187
Нарушения: 0/0 (0)
Репутация: 74780

Thread Starter Re: MySQL replace

Цитата:
Сообщение от XPraptor Посмотреть сообщение
Тут для скорости вообще нужно схитрить, создать таблицу временную с одним полем для этого текста и ключем как ключ основной талицы.
При проходе php, выбрать только ключ и это поле текста (SELECT key, text FROM...) записывать результат изменения в эту временную таблицу и по окончании сделать вставку в основную:
Код:
INSERT INTO table_name (key, text) SELECT key, text FROM table_temp ON DUPLICATE KEY UPDATE table_name.text=table_temp.text
Я думал по другому.
Через php выбрать запись, обработать её php-шным REGEXP REPLACE, после перезаписать существующую запись в базе новой

Затем выбрать следующую запись ... и тд
В промежутках перед следующей выборкой, делать паузу, что-бы БД сильно не грузить.
Но сам я не программер, знания на уровне общих понятий.
Скрипт такой не смог найти.
sanek1991 вне форума   Ответить с цитированием
Старый 20.12.2020, 17:06   #16
XPraptor
Думаю, что надо худеть
Академик
 
Аватар для XPraptor
 
Регистрация: 22.06.2020
Сообщений: 1,791
Сказал(а) спасибо: 1,526
Получил(а) "Спасибо": 1,939
Нарушения: 0/0 (0)
Репутация: 608321

По умолчанию Re: MySQL replace

Sitealert, Так прогони EXPLAIN на запрос одной строки - что пишет, сколько строк затрагивает, какие индексы задействует?
XPraptor вне форума   Ответить с цитированием
Старый 20.12.2020, 17:07   #17
XPraptor
Думаю, что надо худеть
Академик
 
Аватар для XPraptor
 
Регистрация: 22.06.2020
Сообщений: 1,791
Сказал(а) спасибо: 1,526
Получил(а) "Спасибо": 1,939
Нарушения: 0/0 (0)
Репутация: 608321

По умолчанию Re: MySQL replace

Цитата:
Сообщение от sanek1991 Посмотреть сообщение
ерез php выбрать запись, обработать её php-шным REPLACE, после перезаписать существующую запись в базе новой
UPDATE затратная штука, особенно на индексах текстовых, поэтому лучше так, как я указал выше, быстрее будет.
XPraptor вне форума   Ответить с цитированием
Старый 20.12.2020, 17:07   #18
Coder
Senior Member
Доцент
 
Регистрация: 25.07.2020
Сообщений: 437
Сказал(а) спасибо: 486
Получил(а) "Спасибо": 712
Нарушения: 0/0 (0)
Репутация: 7417
Отправить сообщение для Coder с помощью ICQ

По умолчанию Re: MySQL replace

Цитата:
Сообщение от sanek1991 Посмотреть сообщение
Я думал по другому.
Через php выбрать запись, обработать её php-шным REPLACE, после перезаписать существующую запись в базе новой

Затем выбрать следующую запись ... и тд
Взять всю базу, переработать и переписать... Причём даже через простой текстовый редактор., с соответствующим функционалом поиска и замены. И записать базу взад.
Если надо - через конвертацию в редактируемые форматы - вариантов много разных.

Ну, и через php и буфер или без буфера - просто, конкретно и сердито.
Coder вне форума   Ответить с цитированием
Старый 20.12.2020, 17:13   #19
XPraptor
Думаю, что надо худеть
Академик
 
Аватар для XPraptor
 
Регистрация: 22.06.2020
Сообщений: 1,791
Сказал(а) спасибо: 1,526
Получил(а) "Спасибо": 1,939
Нарушения: 0/0 (0)
Репутация: 608321

По умолчанию Re: MySQL replace

Coder, ну, это уже как последний аргумент.
XPraptor вне форума   Ответить с цитированием
Сказали спасибо:
Старый 20.12.2020, 17:16   #20
Sitealert
Слесарь-сайтосборщик
Доцент
 
Регистрация: 22.06.2020
Адрес: Замкадье
Сообщений: 403
Сказал(а) спасибо: 985
Получил(а) "Спасибо": 1,178
Нарушения: 0/0 (0)
Репутация: 180645

По умолчанию Re: MySQL replace

Цитата:
Сообщение от sanek1991 Посмотреть сообщение
WHERE content_id = 6094079
А почему content_id, а не id? По автоинкременту что идёт?
Sitealert вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка - MySQL query error [1615]: Prepared statement needs to be re-prepared sanek1991 Хостинг и домены 19 29.07.2020 19:24
Помогите с SQL запросом replace sanek1991 Веб-строительство 34 16.07.2020 13:26
Переход с php5 на php7, если много mysql запросов ziliboba0213 Веб-строительство 31 14.07.2020 18:44


Текущее время: 21:51. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc. Перевод: zCarot