- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Я бы предложил использовать Replace вместо Update, если blog_id это PK
тогда можно обойтись одним запросом
А ваще это хранимыми процедурами еще в пятерке решается
neolord добавил 28.09.2009 в 20:50
по своему наблюдение where in - медленная конструкция
Where In очень быстрая конструкция, если на поле ,по которому идет поиск, стоит индекс любого типа и/или оно числовое, и если ожидаемое кол-во строк в выборке составляет не более 5-10% от таблицы. Хотя в некоторых случаях mysql проявляет чудеса изобретательности и сам оценивает кол-во результатов в выборке, делая выбор в пользу full table scan
Miracle, один раз пересчитать слетевшие счетчики? из этого нужно высасывать проблему и пытаться выжать соки из дохлого сервера ?
Лучше книжки читайте. Методикой оптимизации вы не владеете, как я вижу : вы не показали ни одного explain, не посчитали нагрузку от запроса ни в каких единицах.
вот такая конструкция ещё есть:
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
там же и примеры.
задача решаема с похожим вложенным инсерт/селектом, но я лично таким способом не пользовался :)
Нашел отличное решение, Для пользователей сделать кнопочку, которым кажется что у них что-то не то с кол-вом сообщений пересчитать только для них :)
Miracle добавил 28.09.2009 в 21:27
Ребята, я не спорю, хреновый видимо я самоучка, но зато пытаюсь докопаться. Хотя не все методы мне нравяться. :))
Сервех 2х процессорный 8 гб памяти - дохлый? (я реально не в теме, но по-моему нет)
на нем два живучих проекта 25 к уников вместе и два пхпбб2 (со всеми вытекающими) форума
всем спасибо , пока решения правда не нашел.
с хранимыми процедурами не знаком, реплейс надо будет попробовать...
OReIlly.High.Performance.MySQL.Second.Edition.Jun.2008.eBook-DDU.pdf
google it. ВСЕ вопросы отпадут.
в мускуле есть множественные запросы
необходимо использовать вот эту функцию http://ru.php.net/manual/en/mysqli.multi-query.php
ВСЕ вопросы отпадут.
вопросы только начнутся :)DeveloperRu, спасибо, но такое уже советовали...
как можно через mysql_query организовать множественный апдейт.
если отсылать по одному он вешает сервер.
спасибо.
1) Можно слить в один запрос по методу: update table set field=if(id=1,3,if(id=5,8,9)) , только надо следить за длиной запроса... ну и вообще не перестараться. Пояснение: если ИД будет равен одному, то в комменты запишется 3... иначе... если ид=5, запишется 8 иначе 9. На автомате такой запрос легко обсчитается.
2) Очень вероятно что не надо так сложно пересчитывать. Можно по идее сделать одним запросом вида "update wp_posts set comment_count=(select count(*) from wp_comments where wp_posts.ID=wp_comments.comment_post_ID)" . Зависит от Вашей структуры базы конечно, но в большинстве случаев это более чем реально.
Второй способ намного душевнее и быстрее получается обычно. Первый несколько универсальнее, хотя и выглядит крейзанутым.
Первый несколько универсальнее, хотя и выглядит крейзанутым.
тоже первым делом о нём подумал, но решил не советовать.
А вообще, возник вопрос, откуда данные для запроса берутся? Они откуда-то стягиваются, а потом опять заганяются в таблицу? Если так то лучше вариант предложенный под номером 2.
Ну и апдейт 50К записей - это несложная задача, тут даже проблема с пересчётом индексов не должно возникнуть. Такое ощущение, что что-то где-то не так, и как мне кажется вешается не mysql, а что-то другое. Случайно не через пхпмайдмин пытаетесь загнать дамп?
{
$query = "SELECT blog_id , COUNT(blog_id) cnt FROM pr_blog_comment GROUP BY `blog_id` ORDER BY cnt DESC LIMIT ".($p*2000).",2000"; //приходится по 2000 делать, итак сервер падал в 502-504
$result1 = $sql->query($query);
$cnt = 0;
while($rec = $sql->getRecord($result1))
{
$query = "UPDATE `pr_blog` SET `comment_cnt`=".$rec['cnt']." WHERE `blog_id`=".$rec['blog_id']." LIMIT 1;";
$sql->query($query);
$cnt++;
// echo $query;
$min = $rec[cnt];
}
echo $min."-".$cnt;
// $sql->query($query);
$notify[] = "пересчитаны счетчики blog_comment_cnt (pr_blog)";
}
`blog_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned DEFAULT NULL,
`blog_topic` varchar(255) DEFAULT NULL,
`blog_content` text,
`blog_img_enable` tinyint(1) unsigned DEFAULT NULL,
`blog_time` int(11) unsigned DEFAULT NULL,
`blog_views` mediumint(8) unsigned DEFAULT NULL,
`blog_active` tinyint(1) unsigned DEFAULT '1',
`blog_type` enum('pl','pr','bb') DEFAULT NULL,
`comment_cnt` int(11) unsigned NOT NULL DEFAULT '0',
`blog_rate_plus` smallint(6) DEFAULT '0',
`blog_rate_minus` smallint(6) DEFAULT '0',
`blog_rate_plus_users` tinytext,
`blog_rate_minus_users` tinytext,
PRIMARY KEY (`blog_id`),
KEY `user_id` (`user_id`)
) ENGINE=MyISAM AUTO_INCREMENT=48716 DEFAULT CHARSET=cp1251;
`comment_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`blog_id` int(10) unsigned NOT NULL DEFAULT '0',
`user_id` int(10) unsigned DEFAULT NULL,
`comment_content` text,
`comment_date` int(13) unsigned DEFAULT NULL,
`comment_active` tinyint(3) NOT NULL DEFAULT '1',
`blog_comment_rate_minus` tinyint(3) DEFAULT '0',
`blog_comment_rate_minus_users` varchar(255) DEFAULT NULL,
PRIMARY KEY (`comment_id`),
KEY `blog_id` (`blog_id`),
KEY `user_id` (`user_id`)
) ENGINE=MyISAM AUTO_INCREMENT=250938 DEFAULT CHARSET=cp1251;
edogs, старый знакомый с руборда :) спасибо. за советы.
и первый понравился а ждал скорее всего второго, попробую разобраться как с первым так и со вторым, пока понимания ноль :)
ребята, если что-то в моиз запросах или структуре бд хреновое, я к китике отношусь положительно, лучше понять что ты что-то не учел и учесть это чем потом долбаться что бы грамотно разрулить.
конечно нет :), я же объяснил, хочу сделать запросом, и не извращался таким способом, хотя пришлось извращаться с ко-вом итераций...