Tengo el siguiente problema en SQL Server 2005: intentar insertar algunas filas en una variable de tabla lleva mucho tiempo en comparación con la misma inserción que usa una tabla temporal.
Este es el código para insertar en la variable de tabla
DECLARE @Data TABLE(...)
INSERT INTO @DATA( ... )
SELECT ..
FROM ...
Este es el código para insertar en la tabla temporal
CREATE #Data TABLE(...)
INSERT INTO #DATA( ... )
SELECT ..
FROM ...
DROP TABLE #Data
La tabla temporal no tiene claves ni índices, la parte de selección es la misma entre las 2 consultas y el número de resultados devueltos por la selección es de ~ 10000 filas. El tiempo necesario para ejecutar la selección solo es de ~ 10 segundos.
La versión de la tabla temporal tarda hasta 10 segundos en ejecutarse, tuve que detener la versión variable de la tabla después de 5 minutos.
Tengo que usar una variable de tabla porque la consulta es parte de una función de valor de tabla, que no permite el acceso a la tabla temporal.
Plan de ejecución para la versión de tabla variable
Plan de ejecución para la versión de la tabla temporal
fuente
EXEC
en una función ... supongo que estaba equivocadoInvalid use of a side-effecting operator 'INSERT EXEC' within a function.
. ElOPENQUERY
trabajo alrededor de trabajo podría sin embargo.Las variables de tabla a veces son más lentas porque no hay estadísticas sobre las variables de tabla y, por lo tanto, el optimizador siempre asume solo un registro.
Sin embargo, no puedo garantizar que este sea el caso aquí, tendrá que echar un vistazo a la información de "filas estimadas" en el plan de consulta para la variable de tabla.
fuente