Меня давно уже мучает нагрузка на процессор..нагрузка идёт от mysqld..
В общем решил разобраться с ней раз и навсегда..сделал пару команд на сервере: OPTIMIZE и ALTER, которые за 7 месяцев кстати не разу не делал...теперь решил с запросами разобраться...скрипты писал давно и один меня смущает..в нём сразу 3 sql запроса:
INSERT INTO `'.$table_name.'` (`user_id`, `last_date`) VALUES ("'.$viewer_id.'","'.time().'") ON DUPLICATE KEY UPDATE `visits` = (`visits`+1), `last_date`="'.time().'";
SELECT * FROM `'.$table_name.'` WHERE `user_id`='.$viewer_id.';
SELECT COUNT(*) FROM $table_name;
когда в других всё аккуратно, по одному запросу...особенно смущает первый запрос..подскажите, влияет-ли это на нагрузку и как можно упростить/оптимизировать??!)
Спустя 1 час, 4 минуты, 26 секунд (29.02.2012 - 12:09) sergeiss написал(а):
Первый нормальный, второй нормальный.
А вот третий... Если в таблице много данных ("много" - это сотни тысяч и более ), то лучше таким образом не подсчитывать количество. Потому что запрос будет долго работать. Лучше хранить величину количества записей где-то в отдельной таблице и каждый раз при добавлении-удалении обновлять эту (одну) запись. Тогда "подсчет" количества записей будет занимать одно мгновение, т.к. реально считать ты не будешь, а только считаешь одну запись.
А вот третий... Если в таблице много данных ("много" - это сотни тысяч и более ), то лучше таким образом не подсчитывать количество. Потому что запрос будет долго работать. Лучше хранить величину количества записей где-то в отдельной таблице и каждый раз при добавлении-удалении обновлять эту (одну) запись. Тогда "подсчет" количества записей будет занимать одно мгновение, т.к. реально считать ты не будешь, а только считаешь одну запись.
Спустя 2 часа, 25 минут, 32 секунды (29.02.2012 - 14:34) geka96 написал(а):
sergeiss, в базе 1.500.000 записей..и этот запрос кстати уже бесполезный..т.к. раньше когда только запускал проект нужно было узнавать общее кол-во строк, а сейчас уже не нужно..уберу его и правда очень долго работает..)) Спасибо)
Спустя 8 дней, 3 часа, 12 минут, 11 секунд (8.03.2012 - 17:46) geka96 написал(а):
Выяснил, что этот запрос:
Грузит процессор по полной..как его можно оптимизировать? Помогите, пожалуйста.
query ='SELECT * from `'.$table_name.'` order by score desc limit 200';
Грузит процессор по полной..как его можно оптимизировать? Помогите, пожалуйста.
Спустя 3 минуты, 59 секунд (8.03.2012 - 17:50) Visman написал(а):
По полю score индекс создай.
Спустя 1 час, 2 минуты, 40 секунд (8.03.2012 - 18:53) geka96 написал(а):
Visman, спасибо! Нагрузка в 10 раз снизилась))
_____________
Пока они пьют водку и катаются на скейтах, мы строим бизнес и делаем деньги!