- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
как можно через mysql_query организовать множественный апдейт.
если отсылать по одному он вешает сервер.
спасибо.
А какая задача стоит? Может возможно более рационально её решить? Или на крайний случай MySQLi
задача пересчитать счетчики сообщений...
Miracle, какой объём базы, точнее конкретно таблицы pr_blog? Есть ли индексы на поле blog_id ?
Если размер большой, то возможно стоит удалять индекс, закатывать изменения, а потом добавлять индекс.
Их того, что написано может вешать базу только первый запрос по идее, если таблица большая.
Чисто теоретически UPDATE DELAYED позволяет подавать следующий запрос не дожидаясь ответа,
но у вас проблема в самих запросах. засунуть в mysql_query() больше одного запроса не получится.
вот прямо первый UPDATE `pr_blog` SET `comment_cnt`=0 ; - он ведь обновляет все записи без ограничений ? это не будет быстро работать.
Предлагаю вам логически разбить всю работу на порции по идентификаторам.
Например, сначала обновить записи с ид от 0 до 100, потом от 101 до 201 и тд. такой процесс можно растянуть не вызывая тревоги у сисадминов.
Мне кажется, что гораздо более оптимально выполнять
при добавлении каждого комментария. Нагрузка, в общем случае, будет распределена куда более равномерно. Или это противоречит поставленной задаче?
Например, сначала обновить записи с ид от 0 до 100, потом от 101 до 201 и тд. такой процесс можно растянуть не вызывая тревоги у сисадминов.
так и делаю, но не особо это нравиться
Мне кажется, что гораздо более оптимально выполнять
конкретно таблицы pr_blog?
Имя индекса Тип Количество элементов Действие Поле
PRIMARY PRIMARY 52377 blog_id
user_id INDEX 1870 user_id
это свой двиг какой-то? вынесите счетчики в таблицу вида:
blog_id (KEY),comment_cnt
и далее весь пересчёт будет делаться одним вложенным запросом:
replace into blog_comment_counters select blog_id, count(1) from comments_table ct group by ct.blog_id
ну а для отображения уже один джойн :)
не думал я как то об отдельной таблице для счетчиков, но для меня важней их получать без проблем чем 1 раз в месяц( к примеру) пересчитывать... так что вариант однозначно не лучший.
но спасибо.
Miracle добавил 28.09.2009 в 19:44
а если для счетчика, с увеличивающимся объемом данных к 1це, сделать что то типа такого
update set value=1 where id in (x,y,z....) есть ли смысл?
хотел бы услышать знактоков.
по своему наблюдение where in - медленная конструкция
может тогда так
update set value=1 where id = x || id= y || id =z || ...
52377 записи. ой ну прям уникальное явление в российском интернете !
делается тупо : берете свой игровой комп для Крузиса(tm), поднимаете mysql, скачиваете базу и делаете все тяжелые операции и закачиваете назад.
52377 записи. ой ну прям уникальное явление в российском интернете !
делается тупо : берете свой игровой комп для Крузиса(tm), поднимаете mysql, скачиваете базу и делаете все тяжелые операции и закачиваете назад.
я могу еще 10 подобных способов придумать, я хочу сделать максимально интересно и правильно.
можно через load in file, можно slq и exec , как предложили вы, можно вообще руками - но все это не то...
никогда я не думал что это проблема...