performance und Nutzung von CLR-functionen in SQL

Mit SQL server können Sie CLR-functionen, gespeicherte Prozeduren, Benutzertypen und andere objecte erstellen, die in SQL sehr komplex sind.

Aber, kann jemand diese beiden Dinge vergleichen: TSQL object und CLR object, im Sinne von performance, Nutzen, und so weiter.

Was sind echte Situationen für die Verwendung von CLR-objecten?

Gibt es irgendwelche Best Practices Vorschlag für ihre Nutzung?

Es gibt hier zwei Fragen, die separat adressiert werden müssen.

  1. In Bezug auf functionalität und Nutzen schrieb ich einen Artikel (Teil einer Serie zum Thema SQLCLR), der ansieht, welche Verwendungen von SQLCLR "angemessen" sind, vor allem durch das Betrachten, was es tun kann, das nicht anders gemacht werden kann oder nicht getan fast so leicht Dieser Artikel ist " Treppenhaus zu SQLCLR Level 1: Was ist SQLCLR? " (Kostenlose Registrierung erforderlich) und es ist in einer Antwort auf die Frage, die in einem Kommentar zu der Frage, Advantage von SQL SERVER CLR verknüpft wurde zusammengefasst.

  2. In Bezug auf die performance, veröffentlichte ich eine Studie vor ein paar Jahren (Juli 2011), dass detaillierte verschiedene Szenarien und getestet die rohe SQL, dass SQL in einer T-SQL-function, und dass Algorithmus in einer CLR-basierte function. Ich habe sowohl Skalarfunktionen als auch Tabellenwertfunktionen getestet. Dieser Artikel ist " CLR Performance Testing " (keine Registrierung erforderlich). Bitte beachten Sie, dass die Tests auf SQL server 2008 durchgeführt wurden und es wurden performancesverbesserungen in SQL server 2012 in Bezug auf deterministische skalare CLR-basierte functionen gemacht. Bedeutung, die Performance-Ergebnisse der CLR-functionen wäre besser, wenn die Ausführung dieser Tests auf mindestens SQL server 2012, wenn nicht eine neuere Version. Aber die Schlussfolgerung, auch auf SQL server 2008 ohne diese Verbesserungen, ist, dass es von vielen Faktoren abhängt und manchmal ist CLR schneller und manchmal ist T-SQL schneller. Aber am häufigsten eine Formel, die in einfach zu moderaten T-SQL als Teil der Abfrage ausgedrückt werden kann und nicht auf eine function eines jeden Typs abstrahiert ist, ist bei weitem der schnellste.

Was sind echte Situationen für die Verwendung von CLR-objecten?

SQL server fehlt eine aggregierte String-Verkettungsfunktion. Diese bizarre Aufsicht führt zu allen komplizierten Arbeitsumgebungen.

Das Erstellen und Verwenden einer benutzerdefinierten CLR-Aggregatfunktion ist eine saubere Lösung für dieses Problem und ist in der Tat das referencebeispiel, das im MSDN-Artikel zum Thema benutzerdefinierte Aggregatfunktionen gegeben wird:

http://msdn.microsoft.com/en-us/library/ms131056.aspx

Performance

Es gibt einen MSDN Artikel, der zumindest eine theoretische (keine Metriken) Übersicht gibt:

http://msdn.microsoft.com/en-us/library/ms131075.aspx

Und hier ist ein praktischer Beitrag (mit Metriken) von AboutSqlserver.com:

http://aboutsqlserver.com/2013/07/22/clr-vs-t-sql-performance-considerations/