LINUX.ORG.RU

Помогите создать оптимальный запрос

 ,


0

1

База Mysql.

Есть таблица, в ней колонка с типом данных текст. (Пост на форуме)

Нужно выполнить поиск слова в этом тексте и заменить его. Мой запрос: UPDATE table SET column = REPLACE( column, 'search', 'replace' ) ;

Таблица большая 1.7Гб. В связи с этим вопросы:

1. Будет заблокирована таблица во время процедуры?

2. Как долго такая процедура может выполняться?

3. Возможно сделать более оптимальный запрос?

Не особо силен в бд, но ориентировочно вот так:

1) Если используете InnoDB - заблокируется только строка, иначе - вся таблица.

2) С таким запросом - долго.

3) Вы можете добавить fulltext index для column и в конце запроса добавить что-то вроде WHERE column LIKE «%search%»;

l0stparadise ★★★★★ ()
Ответ на: комментарий от l0stparadise

Не соглашусь с первым пунктом. Для InnoDB, в случае, если поле column не может быть однозначно определено значениями первичного ключа блокируется вся таблица. Другими словами, если поле column не индексируемое - заблокируется вся таблица. Если это текст поста, то я почти уверенна - поле не индексируемое.

Надо сначала отобрать нужные рекорды с помощью SELECT, а потом пройтись отдельно по каждому из них используя UPDATE. Выполнятся такой запрос будет долго, но в один момент времени будет заблокирован только один рекорд.

TikName ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.