Estoy realizando algunas pruebas en el servidor SQL y quiero obtener la mejor velocidad de inserción posible. La declaración que utilizo es algo como esto:Velocidad de inserción Sql
INSERT INTO db_Test_databse..tbl_test with(rowlock)
( joinid, date_key,
col1, col2,col3,col4, col5, col6, col7, col8, col9, col10, ...
)
SELECT tabid as joinid,
date_key,
rec_type,
col2,
dbo.udf_convert_hex_to_dec(col3),
col4, col5, col6, col7, col8,
dbo.udf_convert_hex_to_dec(col9),
dbo.udf_convert_hex_to_dec(col10),
...
from source_table f
hay 25 columnas; la mayoría de ellos son de tipo bigint o int.
He descartado todos los índices de la tabla de destino excepto la clave principal, que es un campo de identidad.
¿Algún consejo sobre cómo mejorar el rendimiento más?
P.s. De esta forma, tengo una velocidad promedio de 16,000 filas/seg.
'dbo.udf_convert_hex_to_dec' te está matando. ¿Qué versión de SQL Server estás usando? Hay integradas para hacer esta conversión. – Yuck
Estoy mirando sospechosamente la función 'udf_convert_hex_to_dec'. Los insertos solo se pueden hacer más rápido hasta cierto punto, algunos factores son índices y el rendimiento físico de IO.Ejecutar un analizador de consultas en su contra, apuesto a que la selección es la parte lenta debido a la función. –
Las funciones definidas por el usuario pueden ser lentas. ¿No puedes lanzar el hex directamente a decimal - CAST (col9 AS Decimal (4)) por ejemplo>? – Simon