Pergunta sobre o desempenho profundo do SQL Server HierarchyID

Estou tentando implementar o hierarchyID em uma tabela (dbo. [Message]) contendo aproximadamente 50.000 linhas (crescerá substancialmente no futuro). No entanto, leva de 30 a 40 segundos para recuperar cerca de 25 resultados.

O nó raiz é um preenchedor para fornecer exclusividade, portanto, cada linha subseqüente é filha dessa linha fictícia.

Eu preciso ser capaz de percorrer a tabela em profundidade primeiro e ter tornado a coluna hierarchyID (dbo. [Message] .MessageID) a chave primária de cluster, também adicionado um smallint computado (dbo. [Message] .Hierarchy) que armazena o nível do nó.

Uso: Um aplicativo .Net passa por um valor hierarchyID no banco de dados e desejo recuperar todos (se houver) filhos E pais desse nó (além da raiz, pois é um preenchedor).

Uma versão simplificada da consulta que estou usando:

@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

Pelo que entendi, o índice deve ser detectado automaticamente sem uma dica.

Nos fóruns de pesquisa, vi pessoas utilizando dicas de índice ao lidar com índices de amplitude inicial, mas não observaram esse aplicativo em situações de profundidade. Essa seria uma abordagem relevante para o meu cenário?

Passei os últimos dias tentando encontrar uma solução para esse problema, mas sem sucesso. Eu gostaria muito de receber ajuda e, como este é meu primeiro post, peço desculpas antecipadamente se isso for considerado uma pergunta "noobish". Li a documentação do MS e procurei em inúmeros fóruns, mas não encontrei uma descrição sucinta de a questão específica.

questionAnswers(2)

yourAnswerToTheQuestion