Мы используем 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  Vodafone
  • +1(888)393-24-51  USA, Toll free
  • +44(131)507-01-14  Great Britain
  • +7(499) 348-28-61  Москва

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


galerys
6 лет
0
Медленные запросы БД.

Добрый день.
Импортировал ночью много статей на сайт, нажал "пересчитать публикации" и сайт конкретно начал подвисать.
Новостей 1900 шт.
Зашел в панель управления MySQL, а там 1000 медленных запросов, выполняются по 30 секунд.
Техническая поддержка сказала, что нужно оптимизировать БД, но в базах я не силён :((
Насколько я понимаю, это рейтинг статей грузит сайт. Ошибочно добавилось сотня новых категорий и видимо БД их все сканирует.
Сайт на dle.
<div class='forum-code'><div class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*,</span> <span style="color: #66cc66;">(</span><span style="color: #66cc66;">(</span>vote_num<span style="color: #66cc66;">/</span><span style="color: #66cc66;">(</span>vote_num<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">*</span><span style="color: #66cc66;">(</span>rating<span style="color: #66cc66;">/</span>vote_num<span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">+</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">(</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">/</span><span style="color: #66cc66;">(</span>vote_num<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">)</span><span style="color: #66cc66;">*</span><span style="color: #cc66cc;">1.8508</span><span style="color: #66cc66;">)</span> <span style="color: #993333; font-weight: bold;">AS</span> top <span style="color: #993333; font-weight: bold;">FROM</span> dle_post<span style="color: #66cc66;">,</span> dle_post_extras <span style="color: #993333; font-weight: bold;">WHERE</span> id <span style="color: #66cc66;">=</span> news_id <span style="color: #993333; font-weight: bold;">AND</span> category<span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">3</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">28</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">26</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">4</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">5</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">7</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">9</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">6</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">8</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">10</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">11</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">12</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">13</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">14</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">15</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">30</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">16</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">17</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">18</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">25</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">29</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">2</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">19</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">27</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">20</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">21</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">22</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">23</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">1</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">31</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">24</span> <span style="color: #993333; font-weight: bold;">OR</span> category<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">32</span> <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> top <span style="color: #993333; font-weight: bold;">DESC</span> <span style="color: #993333; font-weight: bold;">LIMIT</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">10</span></div></div>
Подскажите пожалуйста, что нужно сделать, чтобы сайт снова работал?
Спасибо.

rudenko
6 лет
0

Да, так и есть 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

rudenko
6 лет
0

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

galerys
6 лет
0

Так что с этой бедой делать?
Может выполнить какой-то запрос?
Что-то удалить?
Или идёт обработка предыдущего запроса?

galerys
6 лет
0

Всё, разобрался.
Оказывается когда-то ставил корявый ТОП новостей, но работал он криво, убрал отображение, а сам скрипт остался, вот и вылезло боком.
Спасибо за помощь, начал больше понимать в БД =))

Alik
6 лет
0

правильно было бы написать запрос с условием category IN (0,3,28...) © Илья

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

Участвовать в общении на этом форуме могут только зарегистрированные пользователи.