【讨论】写了个比较两条sql语句运行时间的存储过程,看大家有没有更好的方法或思路...
--由于要执行两条件sql语句才能测出它的执行时间,所以会产生很多次结果集
--能不能执行select 语句,但不产生结果集呢,或在最后得出结果之前清除之前产生的结果集
create proc dbo.PROC_SQL_COMP @sql1 varchar(8000),@sql2 varchar(8000),@t int
as
/*
调用:exec dbo.PROC_SQL_COMP @sql1='',@sql2='',@t=5
注:以下时间单位为ms(millisecond 毫秒)
比较两条件Sql语句执行时间,@sql1、@sql2为要比较的sql语句,@t为sql要运行的次数,结果为平均值
返回: AVG1 @sql1所用平均时间
AVG2 @sql2所用平均时间
DT1 @sql1所用总时间
DT2 @sql2所用总时间
TIMES 执行次数
*/
declare @dt1 datetime,
@dt2 datetime,
@dt3 datetime,
@dt4 datetime,
@ms1 bigint,
@ms2 bigint,
@i int
set @ms1 = 0
set @ms2 = 0
set @i = 0
--开始测试
while @i<@t
begin
set @dt1 = getdate()
exec(@sql1)
set @dt2 = getdate()
set @dt3 = getdate()
exec(@sql2)
set @dt4 = getdate()
set @ms1 = @ms1+datediff(ms,@dt1,@dt2)
set @ms2 = @ms2+datediff(ms,@dt3,@dt4)
set @i = @i+1
end
--结束
--测试结果
select AVG1=@ms1*1.00/@t,AVG2=@ms2*1.00/@t,TIMES=@t,DT1=@ms1,DT2=@ms2