EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

[SQL] много UPDATE одним запросом.
На страницу Пред.  1, 2
 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB
[SQL] много UPDATE одним запросом.
Автор Сообщение
DEXIF
#!/bin/bash
Согнул ложку


Зарегистрирован: 27.09.2006
Сообщения: 919
Откуда: Минск
49930 Монеты

СообщениеДобавлено: Пт, 16 Янв, 2009 22:20    Заголовок сообщения: Ответить с цитатой

Веденин писал(а):
А тупой вариант написать кучу update через ; не прокатит вроде бы это будет как один запрос в БД?
UPDATE `table` SET `field`=1 where `id`=1;UPDATE `table` SET `field`=2 where `id`=2; ?

Насколько я осведомлён, запрос - это действие производимое с базой т.о. каждый UPDATE - считается запросом... и тут время так же тратится и на подключение к таблице...

я согласен что это не слишком эргономично... но других способов объединения запросов я не знаю... Sad
_________________


S
|D|EG| Let's Rock! | XAP в ЛИЧКУ, SAPE
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2066
Откуда: Самара
11733 Монеты

СообщениеДобавлено: Пт, 16 Янв, 2009 23:16    Заголовок сообщения: Ответить с цитатой

По моему самый лучший способ это сначала удалить изменяющиеся записи, а потом вставить их одним запросом insert.
Затраты на insert сведутся к построению индексов, затраты на delete это только поиск, update с case ИМХО будет значительно более затратным действием, во первых My-SQL будет вынужден работать с каждой строкой, а не менять их скопом, во-вторых беганье по case не самое лучшее занятие для SQL процессора + затраты на парсинг и подготовку большого CASE будут по моему мнению значительно больше, чем на стандартный insert.

P.S. lazutov сможете провести тест по перфомансу этих вариантов?
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Сб, 17 Янв, 2009 07:28    Заголовок сообщения: Ответить с цитатой

у меня , к сожалению, такой перформанс на всех имеющихся машинах, что с этим лучше подождать.
На больших БД(мой случай) 1 UPD выполняется быстрее 2*(ins||del).
+ пои INSERT будет возникать фрагментация. на больших БД - потеря производительности в 2.5 раза.не тру.
Ладно, объясню ситуацию.
Есть база доменов RU. Скрипт берет и через команду host устанавливает IP. и так 70-95 раз в минуту(с учетом UPD).
Вот и получается,что UPD немного тормозит весь процесс.
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2066
Откуда: Самара
11733 Монеты

СообщениеДобавлено: Сб, 17 Янв, 2009 12:29    Заголовок сообщения: Ответить с цитатой

Может завести несколько таблиц? Скажем для каждой итерации, т.е. берем данные из первой и инсертом записываем во вторую? Потом когда все домены будут перебраны, первую таблицу удаляем и используем новую? Да индекс строим во второй таблице только после добавления всех записей, инсерты можно объединять в один блок.
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Сб, 17 Янв, 2009 14:56    Заголовок сообщения: Ответить с цитатой

этот вариант тоже не подходит. скорее всего сделаю чере3 case
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Сб, 17 Янв, 2009 20:48    Заголовок сообщения: Ответить с цитатой

итак. я решил сделать optimize table.
Смотрим лог.

Для нас важен последний параметр:EST(estimated)-время, затраченное на один ресурсоемкий запрос.(получить количество обработанных элементов)
Думаю,что не надо показывать пальцем в какой именно промежуток времени я оптимизировал таблицу Smile

Код:

   time   :      date      :count : + :i:sp:est
   UNIX   :     GMT +3     :      :   : :/m:sec
1232220005:17/01/2009 22.20:313195:858:10:86:3.8989
1232220605:17/01/2009 22.30:314013:818:10:82:3.3239
1232221205:17/01/2009 22.40:314805:792:10:79:3.5483
1232221804:17/01/2009 22.50:315608:803:10:80:2.5528
1232222403:17/01/2009 23.00:316510:902:10:90:0.7036
1232223003:17/01/2009 23.10:317456:946:10:95:1.7765
1232223602:17/01/2009 23.20:318247:791:10:79:0.7412
1232224202:17/01/2009 23.30:319050:803:10:80:0.6432
1232224802:17/01/2009 23.40:319931:881:10:88:0.4862

Таким образом. Имеем парадоксальнейшие результаты. Я не думал, что оптимизация таблицы ТАК сокращает временные затраты.
Резюмирую. Делать оптимизацию раз в 4 часа. Smile
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB Часовой пояс: GMT
На страницу Пред.  1, 2
Страница 2 из 2

 


EOMY TOP 100 Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group


Рейтинг SIMPLETOP.NET