Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: множественный UPDATE

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
LIME
Отправлено: 29 Января, 2012 - 04:12:54
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




необходимо сделать UPDATE что-то около 6тыс раз))
в сети предлагают пару способов
но на хабре наткнулся на мысль что несколько* запросов будут работать быстрее
могу заполнить массив и выполнить запросы поочередно либо сформировать гигантскую!!! строку для множественного ))
либо комбинировать
что посоветуете


*(здесь) тысяч )))
 
 Top
Мелкий Супермодератор
Отправлено: 29 Января, 2012 - 11:05:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Если новые значения - нечто хаотичное и уникальное:
0) обернуть в одну транзакцию, если innoDB
1) через multy_query отправить
2) забить на оптимизации и прогнать тупым циклом - особенно если действие редкое

А если между значениями есть зависимость от старых или группируются как-то - то группировать. Ведь у update нет мультистрочной записи.
(Добавление)
ммм, наркоманский вариант из сумрачного разума:

создаём темповую таблицу (create temporary table), вносим в неё новые значения и значения, участвующие в условии апдейта. А потом нечто вроде
CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE orig_table JOIN temp_table USING( поля из WHERE ) SET orig_table.FIELD = tmp_table.FIELD

Вот это да


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 29 Января, 2012 - 13:38:50
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




http://habrahabr[dot]ru/qa/1154/
сначала читаются эти 6000 строк и в зависимости от одного из полей вычисляется обновляемое значение другого поля(одно из 8ми возможных)
зависимости нет(результат парсинга не предугадать)
можно каждый ряд по очереди обработать->обновить
или прочитать из базы в массив все значения(или порциями) и обновить все разом, поочередно или порциями
MyISAM.
 
 Top
LIME
Отправлено: 22 Февраля, 2012 - 11:27:46
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Есть ли смысл перед таким большим кол-вом апдейтов удалять индексы и после заново индексировать?
в период апдейтов никто больше с базой не работает
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB