![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
xe0ps |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 1.6.2007 Репутация: нет Всего: нет |
1. если мне необходимо обновить несколько записей в одной таблице (данные для каждой записи будут разными), это можно сделать только отдельными запросами или можно их как-то объеденить в один запрос?
2. можно ли обновлять записи в разных таблицах одним запросом как это делаеться в select? 3. насколько резонно вообще объединение запросов? насколько велика разница в нагрузке от одного сложного запроса и нескольких простых? когда не стоит создавать слишком сложные запросы? заранее благодарен за помощь. |
|||
|
||||
muzer |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 ситуация теоретически улучшилась, использование нескольких индексов одновременно, разные типы индексов и т.д., но опытных данных пока мало. |
|||
|
||||
Dmitry7 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |