SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 13.03.2012 15:38:06

Aqula
Участник
Зарегистрирован: 12.01.2011
Сообщений: 21

Надо оптимизировать запрос

Вот такой запрос. Обновляем в цикле. Для простоты взял 2 строчки

UPDATE `tab` SET
 `date` = CASE
 WHEN `news_id` = 1 THEN 'aa'
 WHEN `news_id` = 2 THEN 'bb' END
 `open` = CASE
 WHEN `news_id` = 1 THEN 'aa'
 WHEN `news_id` = 2 THEN 'bb' END
 `high` = CASE
 WHEN `news_id` = 1 THEN 'aa'
 WHEN `news_id` = 2 THEN 'bb' END
 `low` = CASE
 WHEN `news_id` = 1 THEN 'aa'
 WHEN `news_id` = 2 THEN 'bb' END
 `close` = CASE
 WHEN `news_id` = 1 THEN 'aa'
 WHEN `news_id` = 2 THEN 'bb' END
 `waprice` = CASE
 WHEN `news_id` = 1 THEN 'aa'
 WHEN `news_id` = 2 THEN 'bb' END
 `volume` = CASE
 WHEN `news_id` = 1 THEN 'aa'
 WHEN `news_id` = 2 THEN 'bb' END
 `status` = CASE
 WHEN `news_id` = 1 THEN 'aa'
 WHEN `news_id` = 2 THEN 'bb' END

 WHERE `news_id` IN (1, 2)

Помогите оптимизировать.

Неактивен

 

#2 13.03.2012 16:03:57

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Надо оптимизировать запрос

Индекс на news_id есть?
Если таблица MyISAM, делаете много обновлений в цикле и есть индексы на обновляемые поля, то можно в начале цикла отключить обновление индексов
alter table `имя таблицы` disable keys;
а после цикла
alter table `имя таблицы` enable keys;

Неактивен

 

#3 13.03.2012 20:49:46

Aqula
Участник
Зарегистрирован: 12.01.2011
Сообщений: 21

Re: Надо оптимизировать запрос

Да, первичный. Но news_id я НЕ обновляю!!!
Таблица MyISAM

Я вас правильно понял что так будет лучше чем первый вариант?

    $db->query(alter table `имя таблицы` disable keys);

foreach ($convert as $k => $row)
{
    $db->query("UPDATE LOW_PRIORITY tab_comp_news SET `volume`=,,,,`status` = 1 WHERE `news_id` = {$k}");
}
    $db->query(alter table `имя таблицы` enable keys);

Неактивен

 

#4 13.03.2012 21:14:48

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Надо оптимизировать запрос

Отключение перестройки ключей имеет смысл, если у вас есть индексы на обновляемых полях (`volume` и т.д.) и вы обновляете большое кол-во строк.

Неактивен

 

Board footer

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