【发布时间】:2011-10-28 17:57:27
【问题描述】:
我正在对 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 类型。
我从目标表中删除了所有索引,除了作为标识字段的主键。
关于如何进一步提高性能的任何提示?
附:在这种形式中,我的平均速度为 16.000 行/秒。
【问题讨论】:
-
dbo.udf_convert_hex_to_dec正在杀死你。您使用的是哪个版本的 SQL Server?有内置插件可以进行这种转换。 -
我怀疑地看着
udf_convert_hex_to_dec函数。插入只能在一定程度上更快,一些因素是索引和物理 IO 性能。对它运行一个查询分析器,我敢打赌选择是因为这个功能很慢。 -
用户定义的函数可能很慢。您不能将十六进制直接转换为十进制 - 例如 CAST (col9 AS Decimal(4)) >?
-
select 的成本是 9% table spool 的成本是 32% cluster insert 成本是 58%