| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > Оптимизация запросов |
| Автор: xe0ps 1.6.2007, 23:42 |
| 1. если мне необходимо обновить несколько записей в одной таблице (данные для каждой записи будут разными), это можно сделать только отдельными запросами или можно их как-то объеденить в один запрос? 2. можно ли обновлять записи в разных таблицах одним запросом как это делаеться в select? 3. насколько резонно вообще объединение запросов? насколько велика разница в нагрузке от одного сложного запроса и нескольких простых? когда не стоит создавать слишком сложные запросы? заранее благодарен за помощь. |
| Автор: muzer 2.6.2007, 15:25 |
| 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 4.6.2007, 07:10 |
| цикл инициация запроса UPDATE name_tab1 SET fil1="" fil=2 .. UPDATE name_tab2 SET fil1="" fil=2 .. ... завершение либо через хранимую процедуру на сервере СУБД.. Подробнее об этом http://www.da7.ru/otherpage/otp69.shtml |