我正在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
有25列;其中大多数是bigint或int类型。
我删除了目标表中的所有索引,除了作为标识字段的主键。
有关如何提高性能的任何提示?
P.S。在这种形式中,我的平均速度为16.000行/秒。
答案 0 :(得分:17)
要获得最佳效果,您应该:
多个客户端是否并行插入记录?如果是这样,那么你也应该考虑锁定的含义。
请注意,SQL Server可以为by executing the query in SQL Server Management Studio或Database Engine Tuning Advisor建议给定查询的索引。您应该这样做以确保您没有删除SQL Server用于加速INSERT
的索引。
如果这仍然不够快,那么您应该考虑使用BULK INSERT
(或类似bcp utility或SqlBulkCopy
的内容对插入内容进行分组,两者都使用{{1}在封面下)。这将在插入行时提供最高的吞吐量。
另见Optimizing Bulk Import Performance - 该文章中的许多建议也适用于“普通”插入。
答案 1 :(得分:1)
你考虑过使用SqlBulkCopy吗?您需要构建一个DataTable并将其传递给WriteToServer例程。
这很快!
答案 2 :(得分:1)
您可以在结束前在商店程序中使用
OPTION(RECOMPILE)