Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация запросов, update для нескольких таблиц 
:(
    Опции темы
xe0ps
Дата 1.6.2007, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 1.6.2007

Репутация: нет
Всего: нет



1. если мне необходимо обновить несколько записей в одной таблице (данные для каждой записи будут разными), это можно сделать только отдельными запросами или можно их как-то объеденить в один запрос?
2. можно ли обновлять записи в разных таблицах одним запросом как это делаеться в select?
3. насколько резонно вообще объединение запросов? насколько велика разница в нагрузке от одного сложного запроса и нескольких простых? когда не стоит создавать слишком сложные запросы?

заранее благодарен за помощь.
PM MAIL   Вверх
muzer
Дата 2.6.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 31.8.2006

Репутация: 30
Всего: 31



1. Почитайте про INSERT ... ON DUPLICATE KEY UPDATE.
Плюсы по сравнению с REPLACE (которым тоже можно решить задачу): не нужно знать значения остальных полей, не фрагментирует индекс.
Минусы: в различных версиях различные баги с этим запросом (в основном, в разборе синтаксиса), работает чуть медленнее REPLACE'а, но это чаще всего компенсируется нефрагментированностью индекса.

2. Можно. UPDATE table1 INNER JOIN table2 ON table1.field1 = table2.field2 SET ... WHERE ...
Нестабильно работает по времени выполнения, лучше предварительно как следует протестировать и погонять разные варианты аналогичным запросом EXPLAIN SELECT ...

3. Вставку записей лучше объединять. UPDATE одной таблицы имеет смысл преобразовывать в INSERT ON DUPLICATE KEY UPDATE, если меняете большое кол-во записей и новые значения полей не вычисляемы из других полей. UPDATE нескольких таблиц объединять можно, но осторожно (см. п.2). Вообще по опыту работы с 4.1 - часто (хотя, конечно, зависит от конкретного примера) лучше работать с отдельными таблицами, в 5.0 ситуация теоретически улучшилась, использование нескольких индексов одновременно, разные типы индексов и т.д., но опытных данных пока мало.
PM WWW   Вверх
Dmitry7
Дата 4.6.2007, 07:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 4.6.2007

Репутация: нет
Всего: нет



цикл
инициация запроса
UPDATE name_tab1 SET fil1="" fil=2 ..
UPDATE name_tab2 SET fil1="" fil=2 ..
...
завершение

либо через хранимую процедуру на сервере СУБД..
Подробнее об этом http://www.da7.ru/otherpage/otp69.shtml
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0647 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.