MySQL оптимизация запросов

Toppins
На сайте с 26.03.2011
Offline
45
683

Здравствуйте, проблема такая: движок самописный, в конце марта добавлял данные на сайт и начала вылазить ошибка 504. Обратился в тех. поддержку хостинга с этой проблемой. Они мне ответили что есть два варианта исправления такой проблемы - оптимизировать запросы MySQL или проапгрэйдить сервер.

Далее я пересел на более мощный сервер, ошибка пропала, но страницы очень долго открываются. Начал искать следующий выход из этой ситуации и выяснил, что есть запрос который нагружает процессор сервера на 150% и его нужно оптимизировать или переписать.

Кто сможет помочь решить эту проблему или может кого посоветуете, пишите пожалуйста буду очень признателен.

С уважением, Александр.

CpaClub.org (http://cpaclub.org/)
A
На сайте с 29.12.2007
Offline
68
#1

Вы бы хоть сам запрос показали. А желательно еще и структуру базы (включая индексы).

Toppins
На сайте с 26.03.2011
Offline
45
#2

Вот запрос который нагружает:

ads.*,

feautures.`hot` as f_hot ,

feautures.`color` as f_color ,

feautures.`fast` as f_fast ,

feautures.`up` as f_up ,

feautures.`addtime` as f_addtime ,

feautures.`addtime`+ads.expire as expire ,

feautures.`unlock` as f_unlock ,

cat.title as category ,

(SELECT COUNT(*) FROM adsFiles WHERE adsFiles.adsId=ads.id) AS images_count,

(SELECT dir FROM adsFiles WHERE adsFiles.adsId=ads.id limit 1) AS image ,extFields.* , CONCAT(

(SELECT `title` FROM car_models where car_models.`id`=extFields.`marka_model_1`) ,

' ',

(SELECT `title` FROM car_models where car_models.`id`=extFields.`marka_model_2`)

) as marka_model

FROM

`ads` as `ads`,

`feautures` as feautures,

`categories` as `cat`,

`extFields` where ( `categoryId`='3' ) AND `checked`='1' AND (

cat.id=ads.categoryId AND

extFields.adsId=ads.id AND

feautures.adsId=ads.id AND

cat.id=ads.categoryId AND

extFields.adsId=ads.id) and feautures.`addtime`+ads.expire>1334042376 GROUP by `adsId` ORDER BY (`date`+`feautures`.`up`) DESC$

Больше ничего показать не могу, только знаю где он формируется и всё...

skAmZ
На сайте с 04.09.2009
Offline
122
#3

Toppins, удалите вложенные запросы в select. Получайте данные частями, т.е. уходите от join (у вас псевдо-join), т.е. получили данные из основной таблицы, например, выбираете все categoryId - одним запросом (важно!) получаете данные о всех категориях.

Индекс на categoryId и checked.

S
На сайте с 23.05.2004
Offline
315
#4

Как можно нагрузить процессор на 150% ? Процессор что ли друга на помощь зовет.

Вам не sql запрос оптимизировать, а всю часть получения данных переделать. Через форум тут не помочь, надо смотреть структуру таблиц, что как сохраняется, как вызывается.

Если вопрос не очень срочный, то могу попробовать помочь. Просто пятница, потом пасха - не очень рабочее состояние.

Это просто подпись.
N
На сайте с 06.05.2007
Offline
419
#5
Stek:
Как можно нагрузить процессор на 150% ? Процессор что ли друга на помощь зовет.

Конечно, там не на 150%. Просто админ смотрит в программу top и видит 150%. Так уж эта программа показывает загрузку многоядерных процессоров.

Stek:
ерез форум тут не помочь, надо смотреть структуру таблиц, что как сохраняется, как вызывается.

золотые слова..

Кнопка вызова админа ()

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий