@drboboev

Построение большой таблицы иерархии PHP + PostgreSQL, наиболее быстрый вывод на страницу?

Добрый день.

Есть задача следующего типа - имеется база данных на PostgreSQL:
- таблица staff содержит иерархию типа родитель-потомок, сейчас записей порядка 500;
- таблица sales содержит информацию о продажах на каждый день, но продажи фиксируются только на нижнем уровне иерархии;
- таблица plans содержит планы всех из таблицы staff по месяцам;

Одним запросом к БД я вытаскиваю всю иерархию join'ом прибавляю к ней plans и sales, суммируя на родителя. Сам запрос выполняется быстро, phpPgAdmin при выполнении запроса выдает 330.565 мсек, конечно хотелось бы быстрее, но быстрее, мне кажется, уже невозможно.

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

Логика следующая - на входе я имею id самого первого родителя, в моём случае id=1. Функция работает так, она через самописную функцию arraySearch() находит всех потомков, у кого parent_id=1, и записывает их в новый массив, в моем случае их получается 6, потом функция вызывается еще раз и находит потомков уже у этих 6-ти и так далее. Каждый раз находя значение, arraySearch() удаляет из первоначального массива найденные значения, тем самым уменьшая массив для ускорения поиска при каждой последующей итерации. Функция продолжает вывод пока массив не опустеет. Всё работает, но работает медленно. Я уверен что есть более быстрый способ вывода, но идеи кончились.

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

Заранее спасибо.
  • Вопрос задан
  • 391 просмотр
Пригласить эксперта
Ответы на вопрос 2
freeExec
@freeExec
Участник OpenStreetMap
@shagguboy
NESTED SET
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы