CLR vs. T-SQL y Procedimientos almacenados en SQL Server
CLR o TSQL? Esa es la cuestion.
Cada vez más y más programadores se queman las pestañas tratando de encontrar la respuesta. Pero la respuesta en realidad depende de las necesitades del propramador.
Para tareas SQL rutinarias, TSQL es lo recomendado. Mientras que CLR es la mejor opción para cálculos, parsing, procesamiento de imágenes y otras tareas que manejan un número limitado de datos.
En un experimento realizado por sqlsolutions para comparar ambas opciones y se encontró que CLR era muy superior utilizando una Pentium 4 de 2.4 GHz y con 1 Gb de RAM.
En el experimento se creó una simple funcion T-SQL que sumaba 2 números. A continuación se muestra la función:
CREATE FUNCTION FuncSum(@n1
INT, @n2 INT)
RETURNS INT AS
BEGIN
RETURN @n1 + @n2 END
Posteriormente se escribió el código en CLR para el mismo cálculo (que evidentemente es más complejo):
using System; using Microsoft.SqlServer.Server; public class TestProcedures { [Microsoft.SqlServer.Server.SqlFunction( IsDeterministic = true, DataAccess = DataAccessKind.Read )] [CLSCompliant( false )] public static int FuncSum_CLR(int n1, int n2) { return n1 + n2; } }
Luego se lo agregó a la base de datos:CREATE ASSEMBLY SQL2005_Assembly FROM 'C:\Documents and Settings\User\My Documents\Visual Studio 2005\Projects\ SQL2005_Assembly\bin\Release\SQL2005_Assembly.dll' WITH PERMISSION_SET = UNSAFE CREATE FUNCTION FuncSum_CLR ( @n1 int, @n2 int ) RETURNS int AS EXTERNAL NAME SQL2005_Assembly.TestProcedures.FuncSum_CLR
Finalmente se corrió la función 100000 veces
Los resultados fueron los siguientes:CREATE PROCEDURE TestFuncSum(_CLR) AS BEGIN DECLARE @t datetime SET @t = getdate() DECLARE @n INT DECLARE @i INT SET @i = 0 WHILE (@i <100000) BEGIN EXEC @n = FuncSum(_CLR) 1,1 SET @i = @i + 1 END SELECT datediff(ms, @t, getdate()) END
- TSQL: 2000ms
- CLR: 6300ms
Los números lo dicen todo.
Extraído y traducido de sqlsolutions
6300 es mas veloz que 2000?
ResponderEliminares decir, la nueva definicion de velocidad es tomarte tu tiempo? :D
Jejejej, CLR es más lento. Gracias por la corrección.
ResponderEliminar