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
 
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
Los resultados fueron los siguientes:
  • TSQL: 2000ms
  • CLR: 6300ms
El experimento muestra que CLR es 3 veces más lento que TSQL.
Los números lo dicen todo.

Extraído y traducido de sqlsolutions

Comentarios

  1. 6300 es mas veloz que 2000?
    es decir, la nueva definicion de velocidad es tomarte tu tiempo? :D

    ResponderEliminar
  2. Jejejej, CLR es más lento. Gracias por la corrección.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

The Deep Sea: una web interactiva para explorar las profundidades el mar y descubrir las extrañas criaturas que viven en él

Detectar el usuario de Windows utilizando C#

Lo nuevo de SQL Server 2008 respecto a SQL Server 2005