Мы используем cookie-файлы
Для оптимизации работы нашего сайта мы используем cookie-файлы. Продолжая использовать сайт, Вы соглашаетесь с использованием cookie-файлов.
  • UAH
  • USD
  • RUB
  • EUR
  • +38(044) 392-74-33  Киев
  • +38(057) 728-39-00  Харьков
  • +38(056) 794-38-31  Днепр
  • +38(032) 229-58-93  Львов
  • +38(048) 738-57-70  Одесса
  • +38(093) 170-15-42  Life
  • +38(067) 400-88-44  Киевстар
  • +38(095) 630-90-82  MTC
  • +1(888)393-24-51  USA, Toll free
  • +44(131)507-01-14  Great Britain
  • +7(499) 348-28-61  Москва

MySQL. Медленные запросы БД.

Форумы MySQL Медленные запросы БД.
galerys
24.10.2014
хостинг: есть
домен: есть
Медленные запросы БД.
Добрый день.
Импортировал ночью много статей на сайт, нажал "пересчитать публикации" и сайт конкретно начал подвисать.
Новостей 1900 шт.
Зашел в панель управления MySQL, а там 1000 медленных запросов, выполняются по 30 секунд.
Техническая поддержка сказала, что нужно оптимизировать БД, но в базах я не силён :((
Насколько я понимаю, это рейтинг статей грузит сайт. Ошибочно добавилось сотня новых категорий и видимо БД их все сканирует.
Сайт на dle.

SELECT *, ((vote_num/(vote_num+0))*(rating/vote_num))+((0/(vote_num+0))*1.8508) AS top FROM dle_post, dle_post_extras WHERE id = news_id AND category= 0 OR category=3 OR category=28 OR category=26 OR category=4 OR category=5 OR category=7 OR category=9 OR category=6 OR category=8 OR category=10 OR category=11 OR category=12 OR category=13 OR category=14 OR category=15 OR category=30 OR category=16 OR category=17 OR category=18 OR category=25 OR category=29 OR category=2 OR category=19 OR category=27 OR category=20 OR category=21 OR category=22 OR category=23 OR category=1 OR category=31 OR category=24 OR category=32 ORDER BY top DESC LIMIT 0, 10


Подскажите пожалуйста, что нужно сделать, чтобы сайт снова работал?
Спасибо.
Прикрепленные файлы:
Илья
24.10.2014
хостинг: есть
домен: есть
Да, так и есть MySQL обрабатывает условие OR очень туго. Тут конечно программисты постарались, так как правильно было бы написать запрос с условием category IN (0,3,28...) кроме этого видно, что в запросе есть ошибка - не определено скобками выполнение условия AND с условием OR.

Правильный запрос:
SELECT *, ((vote_num/(vote_num+0))*(rating/vote_num))+((0/(vote_num+0))*1.8508) AS top
FROM dle_post
INNER JOIN dle_post_extras ON id = news_id
WHERE category IN (0,28,26,4,....)
ORDER BY top DESC
LIMIT 0, 10
Илья
24.10.2014
хостинг: есть
домен: есть
Есть конечно вероятность того, что запросы долго выполнялись из-за внесения изменений в таблицу.
galerys
24.10.2014
хостинг: есть
домен: есть
Так что с этой бедой делать?
Может выполнить какой-то запрос?
Что-то удалить?
Или идёт обработка предыдущего запроса?
galerys
24.10.2014
хостинг: есть
домен: есть
Всё, разобрался.
Оказывается когда-то ставил корявый ТОП новостей, но работал он криво, убрал отображение, а сам скрипт остался, вот и вылезло боком.
Спасибо за помощь, начал больше понимать в БД =))
Alik
28.10.2014
хостинг: нет
домен: есть
правильно было бы написать запрос с условием category IN (0,3,28...) © Илья

Вот это хорошая штука, спасибо. Оптимизировал себе несколько запросов с большим количеством условий «OR».
Участвовать в общении на этом форуме могут только
зарегистрированные пользователи.

Если вы уже зарегистрированы Вам необходимо войти на форум.

Тема закрыта по истечению срока давности.
Горячая линия
(044)
392 74 33
другие города