Witam,
mam bazę danych z użytkownikami. Każdy z nich ma swojego opiekuna, gdzie każdy może zostać opiekunem innej osoby. W ten sposób tworzy się struktura drzewiasta wszystkich użytkowników. Teraz rodzi się problem z wydajnością. Otóż osoby, która jest u samej góry tego drzewa, aby pobrać wszystkich użytkowników muszę wykonać blisko tysiąc zapytań do bazy, bo muszę pobrać na początku wszystkie osoby, które znajdują się bezpośrednio pod nim, następnie dla tych osób pobrać kolejne osoby będące bezpośrednio pod nimi itp. Na razie to działa, ale jest szalenie nieoptymalne. Potrzebuję jakiegoś lepszego rozwiązania.
Myślałem o tym, żeby pobrać wszystkich użytkowników bez żadnych kryteriów. Następnie przeszukać dla użytkownika tą tablicę w celu znalezienia struktury. Zapytanie będzie jedno, ale będzie wiele razy przeszukiwać tą tablicę, aby znaleźć całą strukturę dla wybranej osoby.
Wpadłem na pomysł, aby każdemu użytkownikowi dodać poziom w drzewku, czyli jak "głęboko" w tej strukturze się znajduje. Czyli (wg struktury w załączniku) użytkownik A będzie miał poziom 0, użytkownicy BCD będą mięli poziom 1, od E do M poziom 2 itp. No i dla użytkownika K z bazy pobiorę tylko te osoby, które mają poziom 3 i wyższy i w nich będę wyszukiwać jego strukturę. W ten sposób dla osób niżej w strukturze złożoność spadnie.
Zastanawiałem się czy macie jakieś inne sposoby, aby zoptymalizować wyszukiwanie tych osób. Cache odpada.