Viele Probleme erfordern Denormalisierung und/oder sequentielle Operationen können von der CLR außergewöhnlich gut behandelt werden und verwendet werden können die Leistung erheblich zu verbessern, ohne die Benutzerfreundlichkeit auf dem SQL-Ende zu opfern (viel). Anstatt sich ausschließlich auf set-basierte oder iterative Operationen zu verlassen, können Sie einen hybriden Ansatz wählen, eine Set-basierte Lösung für die großen Transporte verwenden und zu einem iterativen Modell für die engen Schleifen wechseln.
Die integrierten Typen hierarchyid
und Geospatial (d. H. geography
) in SQL Server 2008 sind gute Beispiele für das Denormalisierungsproblem. Beide enthalten eine (fast) beliebig große Menge an Daten, die schwer zu normalisieren sind, ohne die Leistung zu beeinträchtigen - Sie müssten Rekursion oder Cursor verwenden, um sinnvoll mit ihnen zu arbeiten, oder Sie verwenden ein Ratten-Nest aus Triggern und/oder geplanten Aufgaben Pflegen Sie eine Denormalisierungstabelle.
Ein anderes Problem, das ich mit CLR-Typen gelöst habe, ist die Inline-Komprimierung. Dies klingt vielleicht nach einer sinnlosen oder akademischen Übung, aber wenn Ihre vollständig normalisierten Daten in Terabytes vorstoßen, bedeutet eine Reduzierung der Größe um 80-90% eine Menge. SQL hat jetzt eine eigene integrierte Komprimierung und SQL 2005 hatte Vardecimal, und das sind auch gute Tools, aber ein domänenbewusster "Minimierungs" -Algorithmus kann sowohl hinsichtlich der CPU-Last als auch der Komprimierungsrate um ein Vielfaches effizienter sein. Natürlich gilt das nicht für jedes Problem, aber für einige.
Noch ein anderes sehr häufiges Problem, das oft auf dieser Seite gefunden wird, ist das Erzeugen einer Sequenz im laufenden Betrieb - zum Beispiel eine Folge aufeinanderfolgender Daten.Gängige Lösungen sind rekursive CTEs, statische Sequenztabellen und die wenig bekannten spt_values
Tabellen, aber eine einfache CLR UDF ist besser als alle anderen und bietet viel mehr Flexibilität.
Zuletzt auf meiner Liste: Benutzerdefinierte Streaming-Aggregate sind auch sehr nützlich, besonders für alles, was mit Statistiken zu tun hat. Es gibt einige Dinge, die Sie einfach nicht aus den integrierten SQL-Aggregaten erstellen können, wie z. B. Medianwerte, gewichtete gleitende Durchschnitte usw. UDAs können auch mehrere Argumente annehmen, so dass Sie sie parametrisieren können; Technisch gesehen ist ein Aggregat nicht garantiert, Daten in einer bestimmten Reihenfolge in der aktuellen Version von SQL Server zu empfangen, aber Sie können diese Einschränkung umgehen, indem Sie ein ROW_NUMBER
als zusätzliches Argument eingeben und damit nahezu jede Fensterfunktion implementieren (have das Aggregat spuckt einen UDT aus, der dann in eine Tabelle umgewandelt werden kann.
Es ist wirklich sehr frustrierend, wie wenige Beispiele wirklich nützliche SQL-CLR-Anwendungen gibt; Suchen Sie auf Google und Sie erhalten 10 Millionen Ergebnisse, jedes einzelne von ihnen für einige alberne String-Verkettung oder Regex. Diese sind nützlich, aber nehmen Sie sich ein paar Minuten Zeit, um etwas über SQL-UDTs und UDAs zu erfahren, und Sie werden sehen, dass sie in Ihren eigenen Anwendungen viel genutzt werden. Gehen Sie natürlich nicht durcheinander - denken Sie sorgfältig darüber nach, ob es eine bessere Lösung in reinem SQL gibt - aber lassen Sie sie auch nicht außer Acht. Hier
Dies ist einer der informativsten Beiträge, die ich je gelesen habe. Vielen Dank. –
+1 sehr schön setzen –