У меня проблема при заказе серии "тем" в структуре форума, когда я делаю запрос, генерирует список (среди миллионов записей) так быстро (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)
Спасибо
используя LIMIT
без ORDER BY
, позволяет системе принимать любые 100 записей, поэтому он берет первое, что находит.
добавление ORDER BY
говорит, что вам нужно около 100 конкретных записей - следовательно, он должен искать именно эти записи.
как исправить?
попробуйте индекс на FORUM_TOPICS (forum_id, status_highlight, ordered)
, чтобы этот индекс был уже в порядке, необходимом для ORDER BY
- следовательно, первые (или последние) записи в индексе - это те, которые вы просили, поэтому БД может их использовать прямо сейчас.
УКАЗАТЕЛЬ на упорядоченном поле (отметка времени 1 - вы получили 3: создано, изменено, заказано) и stauts_highlight не повредит (если это основное условие)