Big Consult Slow При использовании "ORDER BY" - PullRequest
0 голосов
/ 15 января 2011

У меня проблема при заказе ряда «тем» в структуре форума, когда я делаю запрос, который генерирует список (среди миллионов записей) так быстро (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 голос
/ 15 января 2011

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

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

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

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

0 голосов
/ 15 января 2011

ИНДЕКС для упорядоченного поля (отметка времени одна - вы получили 3: создано, изменено, упорядочено), и stauts_highlight не повредит (если это главное условие)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...