MSSQL 2008 绑定变量带来性能飞跃-数据库优化


mssql 2008中直接拼接SQL 和采用参数化的sql执行语句,大多数情况下,sql性能都不会带来质的飞跃,
但在高并发的情况,执行相同的语句,如果采用参数化的形式,可以起到缓存执行计划,来达到程序性能的提高
看下文两个例子,在sql 2008中的执行时间,
当我们向表中插入1万条数据,所耗时都为8秒
当分别向数据库中插入5条数据时,非参数化sql的耗时为45秒,参数化执行方式的耗时为40秒

例1:非参数化的方式,插入5万条数据,耗时45秒
create table A(keyId int identity,info varchar(30))
go
 
 set nocount on 
 
declare @i int 
set @i=0
while @i<50000
begin
 exec ('insert into A(info)values('''+@i+''')')
 set @i= @i+1
end
  set nocount off
go
truncate table A
drop table A 
go

例2:参数化的方式,插入5万条数据,耗时40秒
create table A(keyId int identity,info int)
go

set nocount on 
declare @sql nvarchar(100)

set @sql ='insert into A(info)values(@i)'
 
declare @i int 
set @i=0
while @i<50000
begin
 
 exec sp_executesql @sql,N'@i int',@i=@i
 set @i= @i+1
end 
set nocount off 
go

truncate table A
drop table A 
go