• 关于事物与性能的测试


    在网上找了很多关于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语句时手动处理事物比不处理快。

  • 相关阅读:
    MVC中使用Ajax提交数据 Jquery Ajax方法传值到action
    Jquery获取select,dropdownlist,checkbox下拉列表框的值
    mvc Attribute NotMapped DisplayName Required 等介绍
    asp.net mvc Controller控制器返回类型
    蓝桥杯必备算法模板
    解决vant-weapp组件库的example的导入问题
    JAVA学习之路(多线程)---模拟售票(细解)
    【位运算,异或】“只出现一次的数字” 的一类问题解决方法
    【蓝桥杯2016第七届比赛题目】JAVA A组
    【API】151. 翻转字符串里的单词
  • 原文地址:https://www.cnblogs.com/lxlwellaccessful/p/7002755.html
Copyright © 2020-2023  润新知