Rendimiento de los tipos de tabla definidos por el usuario en SQL Server

Hemos estado usandoTipos de tabla definidos por el usuario para pasar una lista de enteros a nuestros procedimientos almacenados.

Luego los usamos para unirnos a otras tablas en nuestras consultas de proceso almacenadas.

Por ejemplo:

CREATE PROCEDURE [dbo].[sp_Name]
(
    @Ids [dbo].[OurTableType] READONLY  
)
AS
    SET Nocount ON

    SELECT
        *
    FROM
        SOMETABLE
        INNER JOIN @Ids [OurTableType] ON [OurTableType].Id = SOMETABLE.Id

Hemos visto un rendimiento muy pobre de esto cuando se usan conjuntos de datos más grandes.

Un enfoque que hemos utilizado para acelerar las cosas es volcar el contenido en una tabla temporal y unirlo en su lugar.

Por ejemplo:

CREATE PROCEDURE [dbo].[sp_Name]
(
    @Ids [dbo].[OurTableType] READONLY  
)
AS
    SET Nocount ON
    CREATE TABLE #TempTable(Id INT)
    INSERT INTO #TempTable
    SELECT Id from @Ids

    SELECT
        *
    FROM
        SOMETABLE
        INNER JOIN #TempTable ON #TempTable.Id = SOMETABLE.Id

    DROP TABLE #TempTable

Esto mejora significativamente el rendimiento, pero quería obtener algunas opiniones sobre este enfoque y cualquier otra consecuencia que no hayamos considerado. También puede ser útil una explicación de por qué esto mejora el rendimiento.

nótese bien a veces es posible que necesitemos pasar algo más que un entero, de ahí que no usemos una lista separada por comas o algo así.

Respuestas a la pregunta(1)

Su respuesta a la pregunta