我正在sql server上执行一些测试,我想获得最佳的插入速度.我使用的陈述是这样的:
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
Run Code Online (Sandbox Code Playgroud)
共有25列; 其中大多数是bigint或int类型.
我删除了目标表中的所有索引,除了作为标识字段的主键.
有关如何提高性能的任何提示?
Ps在这种形式中,我的平均速度为16.000行/秒.
Jus*_*tin 17
为了获得最佳性能,您应该:
多个客户端是否并行插入记录?如果是这样,那么你也应该考虑锁定的含义.
请注意,SQL Server可以通过在SQL Server Management Studio中执行查询或通过数据库引擎优化顾问来建议给定查询的索引.您应该这样做,以确保您没有删除SQL Server正在使用的索引来加快速度INSERT
.
如果这仍然不够快,那么你应该考虑将一个使用的插入分组BULK INSERT
(或者类似于bcp实用程序,或者SqlBulkCopy
两者都BULK INSERT
在封面下使用).这将在插入行时提供最高的吞吐量.
另请参阅优化批量导入性能 - 该文章中的大部分建议也适用于"普通"插入.