begin print CONVERT(varchar(100), GETDATE(), 21) declare @i int set @i=1000000 while(@i>0) begin begin tran insert into [dbo].[TextMessage](info)values(CAST(@i as varchar)) insert into [dbo].[Course](Name,DisplayOrder)values(CAST(@i as varchar),@i) commit set @i=@i-1 end print CONVERT(varchar(100), GETDATE(), 21) end
1W行数据提交时间
2015-07-25 11:00:17.803
2015-07-25 11:00:19.067
2
10W数据提交时间
2015-07-25 11:01:33.893
2015-07-25 11:01:45.960
12
100W数据提交时间
2015-07-25 11:05:37.653
2015-07-25 11:07:45.390
2:08
begin print CONVERT(varchar(100), GETDATE(), 21) declare @i int set @i=1000000 while(@i>0) begin insert into [dbo].[TextMessage](info)values(CAST(@i as varchar)) insert into [dbo].[Course](Name,DisplayOrder)values(CAST(@i as varchar),@i) set @i=@i-1 end print CONVERT(varchar(100), GETDATE(), 21) end
1W行数据提交时间
2015-07-25 11:01:00.263
2015-07-25 11:01:05.797
5
10W数据提交时间
2015-07-25 11:02:14.293
2015-07-25 11:02:39.437
25
100W数据提交时间
2015-07-25 11:09:33.933
2015-07-25 11:13:12.920
3:39
相关问题
- 关于docker和sql server的问题
- SQLSERVER偶发性错误:用户 'sa' 登录失败。 原因: 无法打开明确指
- 请教Mysql索引优化问题
- EF 插入值问题
- 用部署在docker上的netcore连接主机上的sqlserver报错
你没有加事务,可能SQL Sever自动加了事务(autocommit)。
建议通过 SET IMPLICIT_TRANSACTIONS OFF 关闭自动事务试试。
我说下我的理解吧。首先这两个没有数量级的差别,可以认为基本相同,为什么说相同呢。因为你这里用事务也没用事务区别不大,因为没有其它来竞争资源。反正只有一个连接在操作这两个表,没有其它的操作。
其次,在这种没有其它操作的情况下,用事务只提交一次事务,如果不用事务反正会提交两次,所以感觉应该是用一个事务还就稍微快一点。
下面是我做的测试两组数据
-- 1W 1 4450
-- 1W 2 4583
-- 有其它操作
-- 1W 1 4550 --10ms间隔
-- 1W 2 4636 --无间隔
-- 1W 3 5116 --无间隔事务
-- 1W 4 5290 --10ms间隔事务
-- 1W 1 4986 -- 一条记录(没有开其它连接,只是把操作变成一条insert,也就是事务中只有一条)
---------------------------------------上面这一组是事务操作
--1W 1 4790
--1W 2 4930
--有影响 (另外开连接操作两个表)
-- 1W 1 5193 --10ms间隔
-- 1W 2 6356 --无间隔
-- 1W 3 8733 --无间隔事务
-- 1W 4 6260 --10ms间隔事务
-- 1W 1 2863 -- 一条记录(没有开其它连接,只是把操作变成一条insert)
--------------------------------------这一组是非事务操作
1.先看前面两次测试,确实事务效果还会好一些。这里就是上面说的两条分开操作可能提交两次,会有一些处理是两次。而事务有些处理是一次完成的,所以反而更快。再结合最后一条记录看,把事务里面变成一条,两个比较可以看出事务时间更长,说明事务做了其它的一些处理,所以更慢。
2.看下面4次测试,在外部有其它操作表的时候,我是插入这两个表记录可以看出 事务的情况在有其它的操作情况下,时间是越来越长。而非事务操作的影响就不一样了,先是变长,然后变小,说明大事务对这种无事务操作的影响会越来越小。虽说总的时间事务还是要短一些,但是这里同我的测试数据有关,比如再复杂一些,主要这里是用来看一个趋势。