Тяжелые запросы к базе

#1 29 ноября 2010 в 15:57
Из техподдержки хостинга получил письмо.
-------------------------------
Уведомляем Вас, что работой базы данных MySQL создается повышенная нагрузка на
сервер баз данных. Примеры запросов находятся в прикрепленном файле.

Оптимизируйте, пожалуйста, Ваши скрипты, SQL-запросы и дайте нам знать о результатах.

Например, Вы можете использовать метод EXPLAIN для выяснения "тяжелых" запросов и создание
индексов (CREATE INDEX), тем самым снизив нагрузку на базу данных.
--------------------------------

  1. SELECT c.id as id,
  2. c.target as target,
  3. c.target_id as target_id,
  4. c.target_link as target_link,
  5. c.content as content,
  6. c.guestname,
  7. c.pubdate as fpubdate,
  8. IFNULL(c.user_id, 0) as user_id,
  9. IFNULL(u.nickname, '') as author,
  10. IFNULL(u.login, '') as author_login,
  11. IFNULL(v.total_rating, 0) as rating
  12. FROM hs_users u, hs_comments c
  13. LEFT JOIN hs_ratings_total v ON v.item_id=c.id AND v.target='comment'
  14. WHERE (c.user_id=u.id OR c.guestname<>'') AND c.published=1 AND (c.target="article" OR c.target="blog" OR c.target="palbum" OR c.target="photo" OR c.target="userphoto" OR c.target="catalog" OR c.target="faq")
  15. GROUP BY c.id
  16. ORDER BY c.pubdate DESC
  17. LIMIT 100;
За что отвечают эти запросы и можно ли их как-то облегчить?
И что означает:

использовать метод EXPLAIN для выяснения "тяжелых" запросов и создание индексов (CREATE INDEX)

#2 29 ноября 2010 в 16:53

За что отвечают эти запросы и можно ли их как-то облегчить?

SergeyK
этот запрос отвечает за вывод последних комментариев.
Облегчить его можно. В версии 1.7 посмотрю что с ним можно сделать в общем случае.
А так же можно решить в данном вашем конкретном случае.

И что означает: использовать метод EXPLAIN для выяснения "тяжелых" запросов и создание индексов (CREATE INDEX)

SergeyK
гугл в помощь: гуглить на тему EXPLAIN и CREATE INDEX.
В общих чертах: первое это метод отладки и выявления узких мест запроса через консоль mysql, второе команда создания индекса на определенное поле таблицы.
#3 29 ноября 2010 в 18:31
Вот совет от техподдержки:

Необходимо проставить индексы по полям c.guestname, c.user_id и c.target, что значительно снизит нагрузку на диски сервера и вероятно полностью уберет медленные запросы к базе.

#4 29 ноября 2010 в 18:45

Необходимо проставить индексы по полям c.guestname, c.user_id и c.target, что значительно снизит нагрузку на диски сервера и вероятно полностью уберет медленные запросы к базе.

SergeyK
да, все верно. создайте индексы на указанных полях.
Сам запрос я переделаю, в версии 1.7 будет нормальный запрос.
#5 29 ноября 2010 в 19:33

да, все верно. создайте индексы на указанных полях.

Fuze
Не подскажите, как именно это сделать?
Я дилетант в этом деле, а то сайт загибается… под нагрузкой
он-лайн около 450 человек сидят…
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.