Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » MySQL » Подскажите как можно ускорить запрос к MySQL ?

Подскажите как можно ускорить запрос к MySQL ?


     12.09.2017    Все вопросы » MySQL    1717

вопрос
Добрый день!

Подскажите пожалуйста, как максимально ускорить отдачу главной страницы на большой базе mysql?

Найдена на просторах интернета небольшая инструкция, подскажите как применить, в каком файле подправить сам запрос?

По дефолту представлен следующий запрос:

SELECT p.id, p.autor, p.date, p.short_story, 
   CHAR_LENGTH(p.full_story) as full_story, 
   p.xfields, p.title, p.category, p.alt_name,
   p.comm_num, p.allow_comm, p.fixed, p.tags, 
   e.news_read, e.allow_rate, e.rating, e.vote_num, 
   e.votes, e.view_edit, e.editdate, e.editor, e.reason 
FROM dle_post p LEFT JOIN dle_post_extras e ON (p.id=e.news_id) 
WHERE approve=1 AND allow_main=1 AND date < '2017-05-18 14:23:53' 
ORDER BY date DESC LIMIT 182208,48

С помощью него mysql отдает ответ за 3.1171 сек. Я чуть чуть подкорректировал его и привел к такому виду:
SELECT p.id, p.autor, p.date, p.short_story, 
    CHAR_LENGTH(p.full_story) as full_story, 
    p.xfields, p.title, p.category, p.alt_name, 
    p.comm_num, p.allow_comm, p.fixed, p.tags, 
    e.news_read, e.allow_rate, e.rating, e.vote_num, 
    e.votes, e.view_edit, e.editdate, e.editor, e.reason 
FROM dle_post p LEFT JOIN dle_post_extras e ON (p.id=e.news_id) 
    JOIN ( SELECT id 
           FROM dle_post 
           WHERE approve=1 AND allow_main=1 
              AND date < '2017-05-18 14:23:53' 
           ORDER BY date DESC LIMIT 182208,48 
         ) as t ON t.id = p.id


Данный запрос отрабатывает за 1.3736 сек.

Добавьте в сортировку поле dle_post.id и передавайте в запрос dle_post.id и dle_post.date из последней строки предыдущей выборки. Будет такой запрос:

SELECT p.id, p.autor, p.date, p.short_story, 
   CHAR_LENGTH(p.full_story) as full_story, 
   p.xfields, p.title, p.category, p.alt_name,
   p.comm_num, p.allow_comm, p.fixed, p.tags, 
   e.news_read, e.allow_rate, e.rating, e.vote_num, 
   e.votes, e.view_edit, e.editdate, e.editor, e.reason 
FROM dle_post p
LEFT JOIN dle_post_extras e ON (p.id=e.news_id) 
WHERE approve=1
      AND allow_main=1
      AND (p.date < @last_date
           OR
           (p.date = @last_date
            AND p.id = @last_id))
ORDER BY date DESC, id DESC
LIMIT 48;

Ответа пока нет


Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх