выбор товаров из каталога

a-kai

Новичок
Посоветуйте как сделать, плз.
На сайте есть товары и каталог с (предположим) неограниченной вложенностью.
Товары могут лежать как в одном разделе каталога, так и в нескольких.
Каталог сделан с помощью nested sets.

В итоге получается вот что.

items
id | title

category
id | title | root_id | lft | rgt | level

items_category
id | items_id | category_id

В таблице ItemsCategory для каждого товара есть запись только о нижнем разделе каталога.

Товаров - около 250-300 тысяч и количество растет.
Каталог - около 15 тысяч записей. Растет медленно.

Теперь сам вопрос. Если мне нужно выбрать все товары из неконечного раздела каталога, то я выполняю такой запрос:

SELECT
*
FROM
items_category ic
LEFT JOIN items i
ON (i.id = ic.items_id)
LEFT JOIN category c
ON (c.id = ic.category_id)
WHERE
(c.root_id = '#нужный корневой элемент#' AND
c.lft >= '#lft нужного мне раздела#' AND
c.rgt <= '#rgt нужного мне раздела#')
GROUP BY
ic.items_id;

Все выбирается правильно, но долго.
Как оптимизировать?

P.S.
Думаю еще над вариантом записывать в items_category все разделы для каждого товара, а затем выбирать только те товары, для которых есть запись в items_category с нужным разделом. Может попробовать его?
 
Сверху