Big Consult Slow При использовании «ORDER BY»

0

У меня проблема при заказе серии "тем" в структуре форума, когда я делаю запрос, генерирует список (среди миллионов записей) так быстро (0,12 секунды), но когда я добавляю "ORDER BY упорядоченный DESC" запрос занимает 1 минуту.

        SELECT 
        forum_topics.id AS id,
        forum_topics.slug AS slug, 
        forum_topics.user_id AS user_id, 
        forum_topics.forum_id AS forum_id, 
        forum_topics.title AS title,
        forum_topics.total_post AS total_post,  
        forum_topics.total_view AS total_view,
        forum_topics.last_post_id AS last_post_id,
        forum_topics.created AS created,
        forum_topics.modified AS modified,
        forum_topics.ordered AS ordered, 
        forum_topics.status_close AS status_close,
        forum_topics.status_view AS status_view, 
        t_users.id AS topic_user_id, 
        t_users.nick AS user_nick, 
        p_users.id AS post_user_id, 
        p_users.nick AS post_user_nick,
        forum_posts.title AS post_title, 
        forum_posts.created AS post_created 
        FROM forum_topics 
        LEFT JOIN forum_posts ON forum_topics.last_post_id = forum_posts.id 
        LEFT JOIN users AS t_users ON forum_topics.user_id = t_users.id 
        LEFT JOIN users AS p_users ON forum_posts.user_id = p_users.id 
        WHERE forum_topics.forum_id = '9' AND forum_topics.status_highlight = '0' 
        LIMIT 0,100

Любые идеи о том, как заказать этот супер-стол без потери производительности? ПРИМЕЧАНИЕ. Все "id" (PRIMARY) и "* _id" являются индексом, как "упорядоченное" поле, которое является временной отметкой unix INT (15)

Спасибо

Теги:

2 ответа

1

используя LIMIT без ORDER BY, позволяет системе принимать любые 100 записей, поэтому он берет первое, что находит.

добавление ORDER BY говорит, что вам нужно около 100 конкретных записей - следовательно, он должен искать именно эти записи.

как исправить?

попробуйте индекс на FORUM_TOPICS (forum_id, status_highlight, ordered), чтобы этот индекс был уже в порядке, необходимом для ORDER BY - следовательно, первые (или последние) записи в индексе - это те, которые вы просили, поэтому БД может их использовать прямо сейчас.

  • 0
    Я уже все проиндексировал: ПЕРВИЧНЫЙ идентификатор BTREE 8174105 forum_id BTREE forum_id 7 user_id BTREE user_id 5 слаг BTREE слаг 8174105 total_post BTREE total_post 7 заказан BTREE заказан 13 status_view BTREE status_view 2 status_highlight BTREE status_highlight 2 status_close создал BTREE status_close 2 закрыть ..
  • 0
    Здравствуй! Я имею в виду, что вам нужен один отдельный индекс, который содержит эти три столбца - это составной индекс. Кажется, у вас есть много индивидуальных индексов. взгляните на: use-the-index-luke.com/sql/where-clause/searching-for-ranges/…
Показать ещё 1 комментарий
0

УКАЗАТЕЛЬ на упорядоченном поле (отметка времени 1 - вы получили 3: создано, изменено, заказано) и stauts_highlight не повредит (если это основное условие)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню