位置: 编程技术 - 正文

SQL批量插入数据几种方案的性能详细对比(sql数据库怎样批量添加数据)

编辑:rootadmin
公司技术背景:数据库访问类(xxx.DataBase.Dll)调用存储过程实现数据库的访问。技术方案一:压缩时间下程序员写出的第一个版本,仅仅为了完成任务,没有从程序上做任何优化,实现方式是利用数据库访问类调用存储过程,利用循环逐条插入。很明显,这种方式效率并不高,于是有了前面的两位同事讨论效率低的问题。技术方案二:由于是考虑到大数据量的批量插入,于是我想到了ADO.NET2.0的一个新的特性:SqlBulkCopy。有关这个的性能,很早之前我是亲自做过性能测试的,效率非常高。这也是我向公司同事推荐的技术方案。技术方案三:利用SQLServer的新特性--表值参数(Table-Valued Parameter)。表值参数是SQLServer才有的一个新特性,使用这个新特性,我们可以把一个表类型作为参数传递到函数或存储过程里。不过,它也有一个特点:表值参数在插入数目少于 的行时具有很好的执行性能。技术方案四:对于单列字段,可以把要插入的数据进行字符串拼接,最后再在存储过程中拆分成数组,然后逐条插入。查了一下存储过程中参数的字符串的最大长度,然后除以字段的长度,算出一个值,很明显是可以满足要求的,只是这种方式跟第一种方式比起来,似乎没什么提高,因为原理都是一样的。技术方案五:考虑异步创建、消息队列等等。这种方案无论从设计上还是开发上,难度都是有的。技术方案一肯定是要被否掉的了,剩下的就是在技术方案二跟技术方案三之间做一个抉择,鉴于公司目前的情况,技术方案四跟技术方案五就先不考虑了。接下来,为了让大家对表值参数的创建跟调用有更感性的认识,我将写的更详细些,文章可能也会稍长些,不关注细节的朋友们可以选择跳跃式的阅读方式。再说一下测试方案吧,测试总共分三组,一组是插入数量小于的,另外两组是插入数据量大于的(这里我们分别取跟),每组测试又分次,取平均值。怎么做都明白了,Let's go!

1.创建表。

为了简单,表中只有一个字段,如下图所示:

2.创建表值参数类型

我们打开查询分析器,然后在查询分析器中执行下列代码:

Create Type PassportTableType as Table(PassportKey nvarchar())

执行成功以后,我们打开企业管理器,按顺序依次展开下列节点--数据库、展开可编程性、类型、用户自定义表类型,就可以看到我们创建好的表值类型了如下图所示:

说明我们创建表值类型成功了。

3.编写存储过程

存储过程的代码为: 可能在查询分析器中,智能提示会提示表值类型有问题,会出现红色下划线(见下图),不用理会,继续运行我们的代码,完成存储过程的创建 4.编写代码调用存储过程。 三种数据库的插入方式代码如下,由于时间比较紧,代码可能不那么易读,特别代码我加了些注释。

比较神秘的代码其实就下面这两行,该代码是将一个dataTable做为参数传给了我们的存储过程。简单吧。

SqlParameter[] sqlParameter = { new SqlParameter("@TVP", dataTable) };SqlHelper.ExecuteNonQuery(connectionString, CommandType.StoredProcedure, "CreatePassportWithTVP", sqlParameter);5.测试并记录测试结果第一组测试,插入记录数第二组测试,插入记录数第三组测试,插入记录数

通过以上测试方案,不难发现,技术方案二的优势还是蛮高的。无论是从通用性还是从性能上考虑,都应该是优先被选择的,还有一点,它的技术复杂度要比技术方案三要简单一些,设想我们把所有表都创建一遍表值类型,工作量还是有的。因此,我依然坚持我开始时的决定,向公司推荐使用第二种技术方案。写到此,本文就算完了,但是对新技术的钻研仍然还在不断继续。要做的东西还是挺多的。为了方便大家学习和交流,代码文件已经打包并上传了,欢迎共同学习探讨。代码下载作者:深山老林 出处:

推荐整理分享SQL批量插入数据几种方案的性能详细对比(sql数据库怎样批量添加数据),希望有所帮助,仅作参考,欢迎阅读内容。

SQL批量插入数据几种方案的性能详细对比(sql数据库怎样批量添加数据)

文章相关热门搜索词:sql怎么批量添加数据,sql语句批量添加数据,sqlserver批量添加数据,sql批量增加数据,sql数据库批量添加数据,sql 批量添加数据,sql数据库怎样批量添加数据,sql 批量添加数据,内容如对您有帮助,希望把文章链接给更多的朋友!

mysql 数据库中索引原理分析说明 下面,我们举例来说明一下聚集索引和非聚集索引的区别:其实,我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查安字,就会很自然地

SQL 合并多行记录的相同字段值 1.从数据库中先查询符合条件的记录,存放于一个DataTable中,在使用c#等开始遍历这张表,利用DataRow中的主键,再去读取相应的符合条件的多条记录,

MSSQL Server 查询优化方法 整理 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2、I/O吞吐量小,形成了瓶颈效应。3、没有创建计算列导致查询不优化。4

标签: sql数据库怎样批量添加数据

本文链接地址:https://www.jiuchutong.com/biancheng/349806.html 转载请保留说明!

上一篇:SQL数据库的高级sql注入的一些知识(sql语句的高级用法)

下一篇:mysql 数据库中索引原理分析说明(数据库mysql索引)

  • 税务局退给企业的多交的所得税该怎样帐务处理?
  • 高新企业享受税收优惠政策备案怎么申请
  • 电梯广告租赁属于哪类
  • 预缴土地增值税的会计处理
  • 计提 增值税
  • 组装机配件
  • 转让财产收入征税吗
  • 售后回购的增值税税率
  • 开发间接费用的分配率为本月
  • 累计折旧计入资产负债表什么科目
  • 工程管理费如何使用
  • 哪些员工福利可以让企业合理避税
  • 办理出口退税需要的资料
  • 企业转让股权收入应于转让协议生效时确认收入的实现
  • 企业发生的运输费用怎么做账?
  • 房屋出租何时缴纳房产税?
  • 出口退税最新规定2021
  • 公司费用高好还是低好
  • win10锁屏壁纸自动更新
  • php redis实现秒杀思路
  • php安装部署
  • 个税这个月多交了下个月减回来
  • php ftell
  • 企业的工资薪金等现金支出只能通过什么办理
  • php保留两位小数的函数
  • 公司为员工投保意外险,意外险赔付给谁
  • 政府补贴款计入什么科目是否纳税
  • fall 瀑布
  • 蓝桥杯b组2020
  • 应付利息和利息支出什么时候用
  • ps怎么用魔棒选区
  • 帝国cms和thinkphp哪个好
  • 餐饮业采购管理
  • 网上税则
  • php策略模式和工厂模式的区别
  • 二房东开票需要哪些资料
  • 软件使用权计入什么科目
  • 投资性房地产的后续计量
  • 个税申报逾期罚款怎么算
  • 受托加工的物资是存货吗
  • 小规模差额征税是什么意思
  • 残保金少申报了怎么办
  • 中小企业投标费怎么算
  • 红冲去年的管理费用
  • 民间非营利组织包括哪些单位
  • 自己生产的产品用于在建工程
  • 企业贷款利息多少
  • 建筑施工企业购入材料怎么做账
  • 给公司股东分红的账务处理
  • 购买的商品属于什么会计科目
  • 企业筹建期的开办费后期怎么算
  • 什么是企业管理的基础工作
  • 12月费用1月报销的账务处理
  • 人力资源公司可以开培训费发票吗
  • 营业收入净额怎么算出来
  • 审核记账凭证的心得
  • mysql的性能调优
  • SQL Server中通过reverse取某个最后一次出现的符号后面的内容(字符串反转)
  • sqlserver 千万数量级分页存储过程代码
  • mac系统操作教程
  • mac怎么复制粘贴文件夹
  • Linux Container(LXC容器)的基本命令使用简介
  • win10累积更新 卡住
  • windows远程桌面怎么开启
  • diy组装电脑前置怎么样
  • win10系统自带的浏览器叫什么
  • win10升级 其他用户
  • javaweb技术栈是什么
  • bat批处理命令大全
  • cocos code ide 1.0.0 RC0 使用教程
  • node的express
  • fiori开发
  • javascript中的函数该如何理解
  • 安卓高德地图开启相机权限
  • 国家税务总局千户集团企业名单
  • 环保税申报流程视频
  • 工资薪金的税收金额是填实际发生还是帐载金额
  • 深圳市税务网上注销流程图
  • 广州市电子税务局怎样跨区申报税务
  • 跪式服务礼仪规范图片
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设