zoukankan      html  css  js  c++  java
  • 关于事物与性能的测试

    在网上找了很多关于sql优化的方法,在一个存储过程中修改大量数据库数据时(比如需要很多insert,update,delete语句)使用事物就是一种优化,但是网上得来总觉浅,觉知此事要实践,于是我就自己做了一个关于事物的测试:

    这是sql代码
    --如果不存在就创建数据库 if not exists(select 1 from sys.databases where name='dbtest') begin create database dbtest end go --创建完之后就切换数据库(中间用go定义批量) use dbtest go --创建测试表 if not exists (select top 1 1 from sys.tables where name='test_trantest') begin create table test_trantest ( id int primary key identity(1,1), t1 varchar(100), t2 varchar(100), t3 varchar(100), t4 varchar(100) ) end go --测试开始之添加测试 --不开事物 declare @i int , @j datetime , @k int select @i=0,@j=0,@k=0,@j=GETDATE() --插入数据 while(@i<10000) begin insert into test_trantest values('测试数据'+CAST(@i as varchar(20)),'测试数据'+CAST(@i as varchar(20)),'测试数据'+CAST(@i as varchar(20)),'测试数据'+CAST(@i as varchar(20))) set @i=@i+1 end select '不开事物添加10000条数据耗时:'+cast(DATEDIFF(MS,@j,GETDATE()) as varchar(100))+' 毫秒' go --开事物 declare @i int , @j datetime , @k int select @i=0,@j=GETDATE() begin tran --插入数据 while(@i<10000) begin insert into test_trantest values('测试数据'+CAST(@i as varchar(20)),'测试数据'+CAST(@i as varchar(20)),'测试数据'+CAST(@i as varchar(20)),'测试数据'+CAST(@i as varchar(20))) set @i=@i+1 end commit tran select '开事物添加10000条数据耗时:'+cast(DATEDIFF(MS,@j,GETDATE()) as varchar(100))+' 毫秒' go

    结果如下:

    可以看到使用事物修改大量数据要比不适用事物快很多,那么为什么呢?

    原来是每执行一个sql语句都会自动开启和提交事物,而当执行的语句过多就会频繁的开启关闭事物,于是造成了不必要的重复操作,也就降低了效率。所以遇到上述情况可以手动开启和处理事物已达到优化的效果。

    结果:在多sql语句时手动处理事物比不处理快。

  • 相关阅读:
    Google哲学(一)
    Predictably Irractional 相对论的真相
    .NET使用OpenSSL生成的pem密钥文件【做电子商务的朋友可能需要】
    从开辟蓝海到保卫蓝海(一)
    礼让?
    登门槛策略
    从开辟蓝海到保卫蓝海(四)
    盛大招聘 高级数据库开发工程师 工作地点张江高科 学历高者,经验可放宽
    Show一下拿的奖杯
    我们家的一坨和田仔玉[三色皮]
  • 原文地址:https://www.cnblogs.com/lxlwellaccessful/p/7002755.html
Copyright © 2011-2022 走看看