Frage zu SQL Server HierarchyID-Tiefensiegleistung

Ich versuche, hierarchyID in einer Tabelle (dbo. [Message]) mit ca. 50.000 Zeilen zu implementieren (wird in Zukunft erheblich wachsen). Es dauert jedoch 30-40 Sekunden, um ungefähr 25 Ergebnisse abzurufen.

Der Wurzelknoten ist ein Füllelement, um die Eindeutigkeit zu gewährleisten. Daher ist jede nachfolgende Zeile ein untergeordnetes Element dieser Dummy-Zeile.

Ich muss in der Lage sein, die Tabelle mit der Tiefe zuerst zu durchlaufen und die Hierarchie-ID-Spalte (dbo. [Message] .MessageID) zum Cluster-Primärschlüssel zu machen. Außerdem muss ein berechnetes Smallint (dbo. [Message] .Hierarchy) hinzugefügt werden, das speichert die Ebene des Knotens.

Usage: Eine .Net-Anwendung übergibt einen hierarchyID-Wert an die Datenbank, und ich möchte in der Lage sein, alle (gegebenenfalls vorhandenen) Kinder UND Eltern dieses Knotens abzurufen (mit Ausnahme des Stammverzeichnisses, da es ein Füllelement ist).

Eine vereinfachte Version der Abfrage, die ich verwende:

@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

Soweit ich weiß, sollte der Index automatisch ohne Hinweis erkannt werden.

Von Suchforen aus habe ich gesehen, dass Leute Indexhinweise beim Umgang mit Indexbreiten verwendet haben, aber diese Anwendung in Situationen, in denen Tiefe an erster Stelle steht, nicht beobachtet. Wäre das ein relevanter Ansatz für mein Szenario?

Ich habe in den letzten Tagen versucht, eine Lösung für dieses Problem zu finden, aber ohne Erfolg. Ich würde mich über jede Hilfe sehr freuen, und da dies mein erster Beitrag ist, entschuldige ich mich im Voraus, wenn dies als "noobische" Frage angesehen wird. Ich habe die MS-Dokumentation gelesen und unzählige Foren durchsucht, bin aber nicht auf eine prägnante Beschreibung von gestoßen das spezifische Problem.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage