SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 03.08.2015 02:34:20

newsrbk
Участник
Зарегистрирован: 10.05.2015
Сообщений: 4

Кривой запрос

В общем  проблема как всегда начинается когда на сайте появляется много данных, да ещё и запросы кривые.

Помогаю одному человеку, но, что то застрял на одном запросе.

SELECT SQL_CACHE 9 AS test,N.*,
               (SELECT NAME FROM news_regions where id = N.id_region) AS region,
               (SELECT NAME FROM news_category where id = N.id_category) AS category,
               (SELECT NAME FROM news_sources where id = N.id_source) AS source
               FROM news_news N
                WHERE 1=1
                 AND N.id_category = 2  
                   ORDER BY N.date DESC
                   LIMIT 12600,36;


при таком вот запросе выдаёт Отображает строки 0 - 29 (36 всего, запрос занял 3.0455 сек.) что не есть гуд.

записей в категории 2 где-то около полутора миллионов, вот и буксует.

помогите пожалуйста кто чем может )

Неактивен

 

#2 03.08.2015 18:02:58

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3776

Re: Кривой запрос

Вот приблизительная последовательность от простого к эффективному:

1. Уберите 1=1, просто чтобы было красиво (на самом деле может оказаться, что на этом месте бывает что-то еще, но это уже другие запросы)
2. Убедитесь, что есть составной индекс (id_category, date)
3. Попробуйте заменить подзапросы на JOIN
4. Разбейте запрос на два
SELECT N.id FROM news_news N WHERE N.id_category = 2  ORDER BY N.date DESC LIMIT 12600,36;
и уже вторым запросом выбирайте содержимое новости, зная список из 36 id-шнииков.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson