SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.12.2014 19:38:11

izstora
Участник
Зарегистрирован: 26.09.2007
Сообщений: 23

UPDATE большого количества строк

Всем привет!

Подскажите, пожалуйста

есть такой запрос

UPDATE `products` p SET p.`sale` = 0 WHERE  p.`autosale`;

В таблице products 87000 строк
на поле autosale стоит индекс, на поле sale нет индекса

Запрос выполняется 10 секунд

Можно ли как-то ускорить этот запрос? И в чем причина такой медленной работы?

Неактивен

 

#2 05.12.2014 19:42:29

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: UPDATE большого количества строк

А что Вы имели в виду в запросе выражением
WHERE  p.`autosale`
?
Если бы было что-то вроде
WHERE  p.`autosale` = 1
то индекс сработал бы в принципе.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 05.12.2014 19:59:07

izstora
Участник
Зарегистрирован: 26.09.2007
Сообщений: 23

Re: UPDATE большого количества строк

именно это и имел ввиду WHERE  p.`autosale` = 1
сейчас попробую

Неактивен

 

#4 05.12.2014 20:00:41

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: UPDATE большого количества строк

Напишите процентное соотношение тех записей, у которых autosale равен единичке по отношению к тем, у которых не равен - если количество записей, где autosale = 1 большое, то ожидать от индекса ускорения не приходится


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 05.12.2014 20:10:02

izstora
Участник
Зарегистрирован: 26.09.2007
Сообщений: 23

Re: UPDATE большого количества строк

Что-то не помогло
# Query_time: 10.724374  Lock_time: 0.000452 Rows_sent: 0  Rows_examined: 164571
SET timestamp=1417799415;
UPDATE `products` p SET p.`sale` = 0 WHERE  p.`autosale` = 1;

Неактивен

 

#6 05.12.2014 20:10:58

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: UPDATE большого количества строк

Так какое процентное соотношение?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 05.12.2014 20:14:07

izstora
Участник
Зарегистрирован: 26.09.2007
Сообщений: 23

Re: UPDATE большого количества строк

deadka написал:

Напишите процентное соотношение тех записей, у которых autosale равен единичке по отношению к тем, у которых не равен - если количество записей, где autosale = 1 большое, то ожидать от индекса ускорения не приходится

autosale = 1 у 77000 записей
autosale = 0 у 10000 записей, соответственно

Неактивен

 

#8 05.12.2014 20:19:59

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: UPDATE большого количества строк

Ну так Вы вообще почти все записи обновляете, как тут индекс поможет? Он даже использоваться не будет. Если нужна бОльшая скорость, то тут уже нужно скорее думать про оптимизацию железа.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#9 05.12.2014 20:41:43

izstora
Участник
Зарегистрирован: 26.09.2007
Сообщений: 23

Re: UPDATE большого количества строк

Железо загружено далеко не на полную. На сервере 24 ядра и 48 GB оперативки

есть ли способ по-другому подойти к вопросу? Может быть делать это в цикле?

Неактивен

 

#10 05.12.2014 20:52:24

izstora
Участник
Зарегистрирован: 26.09.2007
Сообщений: 23

Re: UPDATE большого количества строк

или может вот так?

SELECT `id` FROM `products` WHERE `sale`=1 AND `autosale`=0  // получаем список id которым не надо обнулять `sale` (сейчас их 220 и никогда не будет больше 1000 в будущем)

а потом

UPDATE `products` SET `sale` = 0 WHERE  `id` NOT IN(список полученных id)

Неактивен

 

#11 08.12.2014 13:07:59

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: UPDATE большого количества строк

Какой тип таблицы, какие настройки хранилища, какие другие запросы выполняются
параллельно с этим?

Мы выяснили, что сам по себе запрос обновляет всю таблицу, индексы не использует
специально (и это хорошо), осталось настроить систему (включая хранилище) smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson