Как изменить структуру БД для оптимизации запросов?
Есть приложение на python с применением sqlalchemy. И есть у меня в приложении страницы и папки.
И имеют они вложенную структуру. То есть каждая страница может иметь под страницу и сама под страница так же может иметь "детей".
С папками такая же шляпа. Страницы и категории находятся в разных таблицах. Но вложенность указывается через parent_id.
Проблема возникает тогда, когда мне надо экспортировать это дело в эксель файл по фильтрам. И вот тут проблема, что бы получить всех "детей" на каждом уровне вложенности у меня получается рекурсия. Естественно на пару тройку тысячах страницах это не заметно, но когда пытаешься экспортировать 3-4 десятка тысяч страниц, происходит огромное количество запросов и бывает так, что все это дело висит по несколько минут, что конечно же не канает.
Как мне изменить таблицу или приложение или запросы, что бы либо это было быстро, либо избавиться от рекурсии?
Буду Вам весьма благодарен.
А рекурсия где, в питоне? может пора узнать про рекурсию на уровне SQL? Так же иногда "дешевле" разом выбрать все записи, а потом уже на уровне python собрать иерархию. Ну и сразу, есть минимум три распространённых способа хранения "вложенности" adjacency list, materialized path, nested sets изучи их.
Самое простое (для 90% случаев этого будет достаточно), нужно добавить индексы для основных запросов.
По текущему описанию проблемы больше не сказать. Для более детального ответа нужно знать текущую структуру БД и сами запросы, которые тормозят.