La pregunta de "¿Escribir un procedimiento almacenado en C# utilizando .NET CLR como parte de SQL Server 2008 hace que mi procedimiento almacenado sea menos eficiente que si estuviera escrito en T-SQL?" es realmente demasiado amplio para dar una respuesta significativa. La eficiencia varía mucho dependiendo de no solo qué tipos de operaciones está haciendo, sino también cómo realiza esas operaciones. Podría tener un procedimiento almacenado CLR que supere en rendimiento a un Proc T-SQL equivalente, pero en realidad tiene un peor rendimiento debido a una codificación deficiente, y viceversa.
Dada la naturaleza general de la pregunta, puedo decir que "en general", las cosas que se pueden hacer en T-SQL (sin demasiada complejidad) probablemente deberían hacerse en T-SQL. Una posible excepción podría ser para los TVF ya que el CLR API tiene una opción muy interesante para transmitir los resultados (escribí un artículo para SQL Server Central - se requiere registro gratuito - aproximadamente STVFs). Pero no hay forma de saberlo con certeza sin tener las versiones CLR y T-SQL del código y las pruebas con datos de nivel de producción (incluso el código mal escrito normalmente funcionará lo suficientemente bien con 10k filas o menos).
Así que la pregunta verdadera aquí se reduce a:
que sé C# mejor de lo que sé de T-SQL. ¿Que debería hacer?
Y en este caso, sería mejor simplemente preguntar cómo abordar esta tarea en particular en T-SQL.Es muy posible que existan soluciones no complejas que aún no conoces, pero que podrías entender al conocer la función/técnica/etc. Y aún puedes codificar una solución equivalente en SQLCLR y compara el rendimiento entre ellos. Pero si no hay una respuesta satisfactoria para manejarlo en T-SQL, entonces hazlo en SQLCLR.
Dicho esto, hice un estudio hace 3 años con respecto a SQLCLR vs T-SQL Performance y publiqué los resultados en Simple-Talk.
¿Qué tan grande de una sobrecarga de comunicación estamos hablando? Tengo grandes conjuntos de datos, pero también estoy haciendo cálculos complejos en lugar de establecer operaciones. –
'@ bytenik': esto depende en gran medida de lo que va a hacer con los datos. Una función de agregado 'SQL' incorporada, por ejemplo, funciona aproximadamente' 3' veces más rápido que un agregado 'CLR'. Si va, por ejemplo, a unir dos conjuntos de registros, tendrá que desarrollar y codificar la unión en el 'CLR', mientras que' SQL Server' tiene varios algoritmos nativos y selecciona el más apropiado, lo que puede aumentar el rendimiento por órdenes de magnitud Por otro lado, 'SQL Server' no tiene agregados en ejecución, y' CLR' puede ser de gran ayuda. Necesito ver sus requisitos para dar una respuesta más específica. – Quassnoi