Как сделать статический вложенный SELECT быстрее

0

У меня есть запрос, похожий на этот

FROM products AS p, ..
LEFT JOIN ( SELECT .. ) AS popularity on popularity.products_id = p.products_id
LEFT JOIN ( SELECT .. ) AS reviews on reviews.products_id = p.products_id
WHERE..
AND..
..

Вложенные SELECT из LEFT JOIN являются статическими, я имею в виду, что на возвращаемый результат не влияют внешние значения. Эти два SELECT используют данные из db и вычисляют результат. Результаты этих запросов редко меняются, когда некоторые пользователи делают обзор для продукта, например.

Проблема в том, что эти SELECT занимают много времени, чтобы пройти, они проходят через каждую строку своих соответствующих таблиц.

Есть ли способ сделать этот запрос быстрее, превратив его в несколько меньших запросов? Или кэширование вложенных выборок каким-то образом?

  • 0
    Можете ли вы опубликовать свой запрос и результат EXPLAIN EXTENDED SELECT ...?
  • 0
    Не так много, чтобы не видеть фактические запросы и индексы для таблиц ...
Теги:

2 ответа

1
Лучший ответ

Я согласен с тем, что мне трудно ответить без дополнительной информации. Однако прочитайте этот пост: http://www.xaprb.com/blog/2006/04/30/how-to-optimize-subqueries-and-joins-in-mysql. В прошлом я нашел его полезным.

Если вы посмотрите на последний абзац, вы увидите методику сохранения результатов вложенных выборок во временной таблице.

0

Возможно, вы захотите добавить некоторые индексы к таблицам, которые используются в ваших инструкциях подзапроса, при правильной индексации базы данных можно было бы мгновенно вернуть результаты из миллионов строк.

Ещё вопросы

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