Sto cercando di implementare gerarchyID in una tabella (dbo. [Message]) contenente circa 50.000 righe (crescerà sostanzialmente in futuro). Tuttavia ci vogliono 30-40 secondi per recuperare circa 25 risultati.Domanda su HierarchyID di SQL Server prestazioni di primo livello
Il nodo radice è un riempimento per fornire univocità, quindi ogni riga successiva è figlia di tale riga fittizia.
Devo essere in grado di attraversare la tabella depth-first e ho reso la colonna hierarchyID (dbo. [Message] .MessageID) la chiave primaria di clustering, ho anche aggiunto un piccoloint calcolato (dbo. [Message] .Hierarchy) che memorizza il livello del nodo.
Utilizzo: Un'applicazione .Net passa attraverso un valore di gerarchia ID nel database e voglio essere in grado di recuperare tutti i (eventuali) figli E genitori di quel nodo (oltre alla radice, poiché è riempitivo).
Una versione semplificata della query che sto 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
Da quello che ho capito, l'indice dovrebbe essere rilevato automaticamente senza un suggerimento.
Dalla ricerca di forum ho visto persone che utilizzano suggerimenti di indice quando si tratta di indici di larghezza, ma non hanno osservato questa applicazione in situazioni di profondità. Sarebbe un approccio rilevante per il mio scenario?
Ho passato gli ultimi giorni a cercare di trovare una soluzione per questo problema, ma senza risultato. Apprezzerei molto ogni tipo di assistenza, e poiché questo è il mio primo post, mi scuso in anticipo se questa sarebbe considerata una domanda "noobish", ho letto la documentazione MS e ho cercato innumerevoli forum, ma non ho trovato una descrizione sintetica del problema specifico.
A proposito, la query che hai? Come scritto, va sempre selezionare TUTTI i nodi nell'intera tabella. Il '@ MessageID.GetAncestor (@ MessageID.GetLevel() - 1)' lo porta fino alla radice, e quindi si seleziona tutto ciò che è un discendente, che è ... tutto. Ecco perché è così lento. – Aaronaught
Giusto per chiarire: la mia situazione richiede l'uso dell'indicizzazione approfondita, scusa per la confusione (mi riferivo all'estensione alla fine semplicemente per fornire un esempio di dove le persone hanno suggerito di usare i suggerimenti dell'indice) – ObjectiveCat