Вопрос о производительности SQL Server HierarchyID в глубину

Я пытаюсь внедрить иерархический идентификатор в таблицу (dbo. [Message]), содержащую примерно 50 000 строк (значительно увеличится в будущем). Однако для получения около 25 результатов требуется 30-40 секунд.

Корневой узел является наполнителем для обеспечения уникальности, поэтому каждая последующая строка является дочерней для этой фиктивной строки.

Мне нужно иметь возможность обойти таблицу в глубину и сделать столбец иерархии (dbo. [Message] .MessageID) первичным ключом кластеризации, а также добавить вычисленный smallint (dbo. [Message] .Hierarchy), который хранит уровень узла.

Использование. Приложение .Net проходит через значениеierarchyID в базу данных, и я хочу иметь возможность получить все (если есть) дочерние элементы И родители этого узла (кроме корневого, поскольку он является заполнителем).

Упрощенная версия запроса, который я использую:

@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

Из того, что я понимаю, индекс должен обнаруживаться автоматически без подсказки.

Из поисковых форумов я видел людей, использующих подсказки по индексам при работе с индексами в ширину, но не наблюдал это приложение в ситуациях с глубиной. Будет ли это подходящим подходом для моего сценария?

Я провел последние несколько дней, пытаясь найти решение этой проблемы, но безрезультатно. Я был бы очень признателен за любую помощь, и, поскольку это мой первый пост, я заранее прошу прощения, если это будет считаться «нубистским» вопросом, я прочитал документацию по MS и искал бесчисленные форумы, но не нашел краткого описания конкретная проблема.

Ответы на вопрос(2)

Ваш ответ на вопрос