Когда я пытаюсь выполнить запрос под обновлением, он занимает около 40 часов. Поэтому я добавил ограничение по времени (обновить запрос с ограничением по времени). Но все равно требуется почти одинаковое время для завершения. Есть ли способ ускорить это обновление?Как увеличить скорость запроса с помощью команды
EDIT: то, что я действительно хочу сделать, - это получить только журналы между определенными датами и запустить этот запрос обновления для этих записей.
create table user
(userid varchar(30));
create table logs
(log_time timestamp,
log_detail varchar(100),
userid varchar(30));
insert into user values('user1');
insert into user values('user2');
insert into user values('user3');
insert into user values('');
insert into logs values('no user mentioned','user3');
insert into logs values('inserted by user2','user2');
insert into logs values('inserted by user3',null);
Таблица до обновления
log_time | log_detail | userid |
.. |-------------------|--------|
.. | no user mention | user3 |
.. | inserted by user2 | user2 |
.. | inserted by user3 | (null) |
Обновление запроса
update logs join user
set logs.userid=user.userid
where logs.log_detail LIKE concat("%",user.userID,"%") and user.userID != "";
Обновление запроса с ограничением времени
update logs join user
set logs.userid = IF (logs.log_time between '2015-08-11 00:39:41' AND '2015-08-01 17:39:44', user.userID, null)
where logs.log_detail LIKE concat("%",user.userID,"%") and user.userID != "";
Таблица после обновления
log_time | log_detail | userid |
.. |-------------------|--------|
.. | no user mentione | user3 |
.. | inserted by user2 | user2 |
.. | inserted by user3 | user3 |
EDIT: Оригинальный вопрос Sql update statement with variable.
ли идентификатор пользователя всегда последний элемент в записи журнала? –
@GordonLinoff Да, это всегда последний элемент. – hellzone
добавьте столбец 'ImportantUserID' в таблицу журналов, сохраните там« важный »идентификатор пользователя. Это будет идентификатор, включенный в строку. Добавьте индекс в этот столбец, выполните поиск в этом столбце. Он будет работать намного быстрее, чем 40 часов. Тем не менее, я бы изменил таблицу вокруг, чтобы улучшить ее.Я бы добавил столбец «ChangeType» (I = insert, U = update, D = Delete и т. Д.), Столбец «ChangeUserID» (кто внес изменения) и «AffectedUserID» (кто был изменен) или что-то в этом роде. у вас будет гораздо более высокая скорость, когда вы можете искать индексированные столбцы и не разделять строки с помощью «LIKE». –