zoukankan      html  css  js  c++  java
  • SqlBulkCopy类进行大数据(10000万条以上)插入测试

    好多天没写博客了,刚刚毕业一个多月,在IT的路上真是迷茫啊!

    关于上一篇博客中提到的,在进行批量数据插入数据库的时候可以通过给存储过程传递一个类型为Table的参数进行相关操作,在这个过程中本人没有进行效率的测试。后来查找发现可以通过SqlBulkCopy类进行大数据插入操作,本文就来介绍一个这个类的作用并做了相关的效率测试(与Insert语句进行对比)。

    SqlBulkCopy只能向SqlServer表写入数据,该表既可以是同一个服务器上的也可以是远程服务器上的。当然要写入的数据即数据源不单单是SqlServer,可以是任何数据源,只要数据可以加载到DataTable中或者DataReader可以读取的数据。

    SqlBulkCopy类批量插入数据代码如下:

    1.先创建一个User类,对应数据库的User表。

     View Code

    数据库User表结构:

    2.创建一个返回存储了一万条数据的DataTable方法:

     View Code

    3.在页面上放了一个按钮,点击该按钮便可进行数据的插入操作,按钮点击事件代码如下:

     View Code

    SqlServer中通过Insert语句批量插入数据的代码如下:

    1.首先创建一个插入一万条数据的存储过程,插入的数据与SqlBulkCopy插入的数据一模一样。

     View Code

    2.执行存储过程。
    EXEC dbo.USP_InsertUserTable

    SqlBulkCopy与Insert语句效率测试对比如下:

    SqlBulkCopy所用时间统计(5次):

    SqlServer Insert语句所用时间统计(5次),通过工具--》Sql Server Profiler进行测试,使用的模板是TSQL_Duration:

    有一点需要注意的:无论是SqlBulkCopy还是Insert语句进行操作,每次测试前都应该进行缓冲区清理以及删除原有数据,以免对测试进行影响,代码如下:

    DBCC DROPCLEANBUFFERS
    DBCC FREESYSTEMCACHE( 'ALL' ) 
    DELETE dbo.[User]

    结论:通过以上的统计分析测试,可以看出SqlBulkCopy操作大数据插入的效率性能明显比Insert语句更高效。

    本人才疏学浅,哪里有不对的欢迎指出。

  • 相关阅读:
    PHP读取MySQL中文乱码
    dotnet如何使用资源文件
    常见的隐藏地址的流媒体下载方法(转)
    圣诞礼物:Google Maps API开发样例一则
    Google EarthMapsKML核心开发技术揭秘 一个完整的Google Maps应用
    WEB界面测试用例~ 收藏
    通过xmlhttp实现报告归档
    转换长日期为短日期
    做delphi控件的笔记
    Reflector使用手记
  • 原文地址:https://www.cnblogs.com/armyfai/p/3903956.html
Copyright © 2011-2022 走看看