Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Доброго времени суток.
Имеется большой запрос, который выполняется очень долго. Буду благодарен за любую помощь в оптимизации.
Запрос:
Отредактированно Me (12.03.2011 23:16:48)
Неактивен
Вот узкое место:
1 PRIMARY i ALL type_id,platform_id NULL NULL NULL 11824 Using where; Using join buffer
Вероятно необходимы ещё индексы по следующим полям для таблицы my_content_item: is_smartphone, type_id.
Также, рекомендую вам условия с константами вынести из условия join в условие where. Для получившейся пары полей также можно сделать двойной индекс: is_smartphone+type_id, причем порядок полей в индексе и в условии должен быть одинаков.
Отредактированно Lem0nti (13.03.2011 22:19:23)
Неактивен
Благодарю за ответ.
На самом деле узким местом была не выборка 11824 строк из таблицы (оптимизатор намеренно не использовал индекс, т.к. в первом запросе это оказалось действительно быстрее), а объединения типа этого:
Неактивен
Добрый день. Вы бы не могли подсказать как можно оптимизировать следующий запрос:
SELECT Payment_Current.ID_Payment,
Payment_Current.Ref_Student,
Payment_Current.Sum,
Payment_Current.Sum_USD,
Payment_Current.PayDate,
Payment_Current.RegDate,
Reason.Reason_Name,
Payment_Form.PaymentForm_Name,
Bank.Bank_Name,
Payment_Current.PaymentBasis,
Payment_Current.Payer,
Payment_Type.PaymentType_Name,
Payment_Year.PaymentYear_Name
FROM Payment_Type RIGHT JOIN (Payment_Year
RIGHT JOIN(Reason
RIGHT JOIN (Payment_Form
RIGHT JOIN (Bank
RIGHT JOIN Payment_Current
ON Bank.ID_Bank=Payment_Current.Ref_Bank)
ON Payment_Form.ID_PaymentForm=Payment_Current.Ref_PaymentForm)
ON Reason.ID_Reason=Payment_Current.Ref_Reason)
ON ref_PaymentYear=id_PaymentYear)
ON ref_PaymentType=id_PaymentType
В результате 388779 строк. Выполняется 17 сек.
Неактивен
Я бы переписал правые вложенные объединения в левые невложенные,
а еще лучше — во внутренние там, где это можно.
И EXPLAIN бы показал после этого. Но, кажется, что при 23 тысячах строк
в секунду Вы упираетесь просто в отдачу строк наружу.
Неактивен
спасибо за ответ.
Неактивен
Страниц: 1