Оптимальный алгоритм подсчета количества объектов

deepslam

Новичок
Оптимальный алгоритм подсчета количества объектов

Добрый день!
У меня есть каталог товаров с рубрикатором, в каждых рубриках лежат товары, подскажите как можно посчитать суммарное количество товаров в каждой рубрике, т.е. чтобы в корневой рубрики число товаров было равно сумме всех товаров в ее подрубриках.

Я делаю следующим образом:
Получаю рубрику, считаю кол-во в ней, далее, получаю подрубрики , считаю сумму в них и складываю.

Данный метод работает, но на больших объемах тормозит.

Скажите как можно увеличить быстродействие этого алгоритма?
 

AmdY

Пью пиво
Команда форума
это вопрос по базам данных?
какая бд, какая структура ....
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума

deepslam

Новичок
который я использую
индексы есть? (если БД)
Да, но только на id
большые объемы это сколько?
Большие объемы ~ 1000 рубрик
какая бд, какая структура ....
MySQL

Таблица rubrics:
id_cat - id рубрики , первичный ключ, индекс
id_child - id родителя
caption и т.д.

Таблица products:
id_prod - первичный ключ, индекс
id_cat - id рубрики
далее еще поля типа названия и прочего

-~{}~ 18.06.07 23:59:

изучаю, спасибо!
 

AmdY

Пью пиво
Команда форума
посторайся получить данные одним-двумя запросами, а дальше делай на чистом пхп, без запросов к БД.
я так делал, когда нельзя было изменять структуру БД.
 

deepslam

Новичок
Окей, спасибо Вам за подсказки, структуру БД , действительно уже не изменить ( Буду думать.
 

AmdY

Пью пиво
Команда форума
Для мускула пятого можно ещё парочку извращение придумать, типа хранимых функций. :(
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Если запрос действительно "медленный" и быстрее его зделать ну никак - храните в БД суммы Ваших рубрик.
При добавлении товара делайте +1.
Раз в сутки по крону "перерасчёт" данных.
Создавайте для сумм новую таблицу.

Правильные индексы на 99% решат Вашу проблемму.

Если данных очень много - то (по моему мнению) самый идеальный вариант это новая таблица.
 

deepslam

Новичок
Да, по поводу сумм была такая идея у меня, но пока попробую сделать индексами.
 
Сверху