SQL Server中insert/update的高性能写法

Posted HyperWang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server中insert/update的高性能写法相关的知识,希望对你有一定的参考价值。

在SQL Server中默认使用了“隐式事务”,但是这严重影响了sql server处理数据的性能。下面我们做一个小测试,使用显示“事务处理”数据,从而显著提高sql server性能:

高性能insert

--创建一张测试的堆表hyper
create table hyper (num int)

--truncate table hyper
--使用while循环插入100万的记录
--注意:为了提供性能,在这里使用了显示事务
set nocount on
DECLARE @i int 
set @i= 0

begin transaction t2
WHILE @i < 1000000
    begin 
        insert into hyper values(@i)
        SET @i = @i + 1
    end 
COMMIT transaction t2

上述写法耗时3s。查询插入记录情况

select COUNT(*) from hyper

低效率insert

然后我们使用另一种写法对比,使用隐式事务后,性能较差的写法

--清除表hyper中的数据
truncate table hyper

--使用隐式事务插入100万记录,耗时明显比显示事务多
set nocount on
DECLARE @i int 
set @i= 0

WHILE @i < 1000000
begin 
    insert into hyper values(@i)
    SET @i = @i + 1
end

使用隐式事务写法在服务器上插入耗时40s。查询插入记录情况

select COUNT(*) from hyper

用sql server profiler分析后,两者的性能差异在CPU上的消耗

关于更多的事务的资料,可以查看MSDN的相关内容。

以上是关于SQL Server中insert/update的高性能写法的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server中insert/update的高性能写法

SQL Server 中的表统计信息会影响 INSERT、UPDATE 性能吗?

SQL Server:INSERT/UPDATE/DELETE 失败,因为以下 SET 选项的设置不正确:'QUOTED_IDENTIFIER'

SQL Server Profiler 2008 怎么追踪特定种类语句如 insert,update,delete,能指定某个数据追踪吗

使用 SQL Server 中的函数插入/更新/删除

数据更新视图的创建与改动