Próbuję wprowadzić hierarchyID w tabeli (dbo. [Message]) zawierający około 50 000 wierszy (znacznie wzrośnie w przyszłości). Uzyskanie około 25 wyników zajmuje jednak 30-40 sekund.Pytanie o SQL Server HierarchyID głęboka pierwsza wydajność
Węzeł główny jest wypełniaczem w celu zapewnienia unikalności, dlatego każdy kolejny wiersz jest dzieckiem tego wiersza manekina.
Muszę być w stanie przejść przez głębię stołu-pierwszy i uczyniłem kolumnę hierarchyID (dbo. [Wiadomość] .MessageID) kluczem kluczowym dla grupowania, również dodano obliczoną małą tablicę (dbo. [Wiadomość] .Hierarchia), który przechowuje poziom węzła.
Użycie: Aplikacja .Net przechodzi przez wartość hierarchyID do bazy danych i chcę mieć możliwość pobrania wszystkich (jeśli istnieją) dzieci i rodziców tego węzła (oprócz root, ponieważ jest to wypełniacz).
Uproszczona wersja zapytania używam:
@MessageID hierarchyID /* passed in from application */
SELECT
m.MessageID, m.MessageComment
FROM
dbo.[Message] as m
WHERE
m.Messageid.IsDescendantOf(@MessageID.GetAncestor((@MessageID.GetLevel()-1))) = 1
ORDER BY
m.MessageID
Z tego co rozumiem, indeks powinien być wykrywane automatycznie bez śladu.
Z forów wyszukiwania Widziałem ludzi wykorzystujących wskazówki do indeksów w przypadku pierwszych indeksów, ale nie zauważyłem tej aplikacji w pierwszych, głębokich sytuacjach. Czy byłoby to odpowiednie podejście do mojego scenariusza?
Spędziłem kilka ostatnich dni próbując znaleźć rozwiązanie tego problemu, ale bezskutecznie. Byłbym bardzo wdzięczny za wszelką pomoc, a ponieważ jest to mój pierwszy wpis, przepraszam z góry, jeśli byłoby to uznane za pytanie "noobish", przeczytałem dokumentację MS i przeszukałem niezliczone fora, ale nie natknąłem się na zwięzły opis konkretnej kwestii.
Przy okazji, zapytanie, które masz? Jak napisano, zawsze wybiera się WSZYSTKIE węzły w całej tabeli. '@ MessageID.GetAncestor (@ MessageID.GetLevel() - 1)' przenosi wszystko aż do katalogu głównego, a następnie wybierasz wszystko, co jest potomkiem, czyli ... wszystko. Dlatego jest tak powolny. – Aaronaught
Aby wyjaśnić: moja sytuacja wymaga użycia pierwszego zindeksowania, przepraszam za zamieszanie (chodzi mi o szerokość - na samym końcu tylko po to, aby podać przykład miejsca, w którym ludzie sugerowali użycie wskazówek indeksowych). – ObjectiveCat