Verwendet jemand HierarchyId in der realen Produktion mit Tabellen mit einer vernünftigen Größe von mehr als ein paar tausend Zeilen? Ist es zuverlässig / performant? Bisher habe ich noch niemanden gefunden, der nicht mit dem Anbieter verbunden ist, und Paul Nielsen rät hier davon ab .
Wie sind Ihre Erfahrungen mit der Verwendung von HierarchyId in tatsächlichen Produktionssystemen?
Welche Kriterien haben Sie verwendet, als Sie HierarchyId anstelle der Alternativen ausgewählt haben?
Dies ist eine Antwort auf Kirks Frage, warum man es nicht benutzt (HierarchyId). Im Vergleich zu materialisierten Pfaden scheint HierarchyId in einigen wichtigen Fällen weniger performant und weniger benutzerfreundlich zu sein.
Der Grund ist einfach: unter Angabe von Microsoft Kommentar zu Connect , „Das Problem ist , dass die CLR Anrufe, einschließlich hierarchyid Methoden sind undurchlässig für den Abfrageoptimierer von Entwurf ist jedoch bedeutet dies , dass die Mächtigkeit Schätzung für sie manchmal recht sein kann.. falsch."
Andererseits ist das Implementieren von materialisierten Pfaden beim ersten Mal sehr einfach, und beim nächsten Mal ist es im Wesentlichen eine Aufgabe zum Kopieren und Einfügen. So erhalten wir mit sehr wenig Aufwand eine vielseitigere und leistungsfähigere Lösung.
Daher stimme ich Paul Nielsen voll und ganz zu, der in seinem hervorragenden Buch "Microsoft® SQL Server® 2008 Bible" Folgendes geschrieben hat: "Die neue HierarchyID ist nicht unumstritten. Sie ist neu und erhält viel Zeit für Presse und Demo, aber ich ' Ich bin mir nicht sicher, ob es ein Problem ist, das eine andere Lösung benötigt. "
quelle
Mein Unternehmen verwendet HeirachyID in mehrstufiger Marketing-Software für den Direktvertrieb. Es klappt. Ich habe nicht wirklich damit gearbeitet, ich weiß nur, dass wir es verwenden.
Das größte Problem, das ich dabei gesehen habe, ist, dass wir die Ebenen in einer Schleife durchlaufen, anstatt mehr satzbasiert zu sein. In diesem Bereich funktioniert es für uns nicht wirklich gut, aber ich bin mir nicht sicher, ob das ein Problem mit dem Typ oder unserer Implementierung ist.
quelle
Ein Problem mit hierarchyid ist, dass Sie eine Lieferantenbindung erhalten. Aber ich habe einen großartigen Artikel von Adam Milazzo darüber gefunden, wie alles intern funktioniert:
http://www.adammil.net/blog/view.php?id=100
Damit konnte ich ein Postgres-Skript schreiben, um meinen Datensatz von MSSQL zu konvertieren. Enthält es auch in einem Skript, das ich geschrieben habe, um die AdventureWorks-Datenbank in Postgres zu importieren:
https://github.com/lorint/AdventureWorks-for-Postgres
Suchen Sie einfach in der Datei install.sql nach "hierarchyid", und Sie werden bald Hinweise zur Konvertierung finden.
quelle
Unser Team hat es in der Produktion implementiert, zunächst ist die Leistung gut, nach 2 Jahren enthält die Tabelle nun 430.000 Zeilen und getroot und getdecendent dauert 3 Sekunden. Beide werden für die Berechnung des nächsten ID-Werts zum Einfügen eines Datensatzes benötigt. Jetzt dauert das Einfügen eines einzelnen Teilbaums ungefähr 16 Sekunden, was überhaupt nicht akzeptabel ist.
quelle