批量插入 SqlBulkCopy的测试
关于SqlBulkCopy的测试
最近要做.net关于sql大量插入,找到了sqlbulkcopy(自己google下,应该很多说明了)这个好东西,于是测试下性能,用了三个方法对比:
1)直接用ado.net,for循环N次进行单条插入
2)把N条插入语句拼在一个sql,进行插入
3)直接使用sqlbulkcopy进行插入
代码如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.Diagnostics;namespaceSQLTEST{    classProgram    {        staticvoidMain(string[] args)        {            //int time = 200;            test(20);            test(200);            test(2000);            test(10000);            test(50000);            Console.ReadLine();        }        publicstaticvoidtest(inttime){            Stopwatch sp = newStopwatch();            Console.WriteLine(time + "条数据插入测试");            //测试方法1            {                using(SqlConnection sqlcon = newSqlConnection("Data Source=.;Initial Catalog=Test;User ID=sa;Password=??"))                {                    sqlcon.Open();                    stringsingesql = "INSERT INTO [student] ([name],[age])VALUES('abc',3);";                    SqlCommand sqlcommand = newSqlCommand(singesql, sqlcon);                    //计时开始                    sp.Restart();                    for(inti = 0; i < time; i++)                    {                        sqlcommand.ExecuteNonQuery();                    }                    sp.Stop();                }            }            Console.WriteLine("方法1:"+ sp.ElapsedMilliseconds + "毫秒");            //测试方法2            {                using(SqlConnection sqlcon = newSqlConnection("Data Source=.;Initial Catalog=Test;User ID=sa;Password=??"))                {                    sqlcon.Open();                    stringsingesql = "INSERT INTO [student] ([name],[age])VALUES('abc',3);";                    stringexecsql = "";                    for(inti = 0; i < time; i++)                    {                        execsql = execsql + singesql;                    }                    SqlCommand sqlcommand = newSqlCommand(execsql, sqlcon);                    //计时开始                    sp.Restart();                    sqlcommand.ExecuteNonQuery();                    sp.Stop();                }            }            Console.WriteLine("方法2:"+ sp.ElapsedMilliseconds + "毫秒");            //测试方法3            {                using(SqlConnection sqlcon = newSqlConnection("Data Source=.;Initial Catalog=Test;User ID=sa;Password=??"))                {                    sqlcon.Open();                    SqlBulkCopy sqlc = newSqlBulkCopy(sqlcon);                    DataTable dt = newDataTable();                    dt.Columns.Add("id");                    dt.Columns.Add("name");                    dt.Columns.Add("age");                    for(inti = 0; i < time; i++)                    {                        dt.Rows.Add(38009, "nemw", 123);                    }                    sqlc.DestinationTableName = "student";                    //计时开始                    sp.Restart();                    sqlc.WriteToServer(dt);                    sp.Stop();                }            }            Console.WriteLine("方法3:"+ sp.ElapsedMilliseconds + "毫秒");            Console.WriteLine();                }    }} | 
插入N条数据的测试结果如下:

效率相差还是很夸张的,大家大量数据插入还是有sqlbulkcopy吧,原理还的高手告知~~
批量插入 SqlBulkCopy的测试的更多相关文章
- sqlserver数据库批量插入-SqlBulkCopy
		当想在数据库中插入大量数据时,使用insert 不仅效率低,而且会导致一系列的数据库性能问题 当使用insert语句进行插入数据时.我使用了两种方式: 每次插入数据时,都只插入一条数据库,这个会导致每 ... 
- Mybatis+mysql批量插入性能分析测试
		前言 今天在网上看到一篇文章(后文中的文章指的就是它) https://www.jianshu.com/p/cce617be9f9e 发现了一种有关于mybatis批量插入的新方法,而且看了文章发现我 ... 
- 使用SqlBulkCopy批量插入数据,测试20万条用时5秒
		using System;using System.Collections.Generic;using System.Linq;using System.Text; using System.Data ... 
- oracle批量插入数据(测试)
		做数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入,那会浪费大量的时间,本文介绍了Oracle中如何通过一条 SQL快速生成大量的测试数据的方法.产生测试数据的SQ ... 
- SqlServer批量插入(SqlBulkCopy、表值参数)
		之前做项目需要用到数据库的批量插入,于是就研究了一下,现在做个总结. 创建了一个用来测试的Student表: CREATE TABLE [dbo].[Student]( [ID] [int] PRIM ... 
- c#数据批量插入
		由于之前面试中经常被问到有关EF的数据批量插入问题,今天以Sqlserver数据库为例,对.net中处理数据批量处理的方案进行了测试对比. 1.四种测试方案 (1)普通的EF数据批量插入:即调用DbS ... 
- Mybatis中实现oracle的批量插入、更新
		oracle 实现在Mybatis中批量插入,下面测试可以使用,在批量插入中不能使用insert 标签,只能使用select标签进行批量插入,否则会提示错误 ### Cause: java.sql.S ... 
- mysql基础---->mybatis的批量插入(一)
		这里面记录一下使用mybatis处理mysql的批量插入的问题,测试有可能不准.只愿世间风景千般万般熙攘过后,字里行间,人我两忘,相对无言. mybatis的批量插入 我们的测试主体类是springb ... 
- [小干货]SqlBulkCopy简单封装,让批量插入更方便
		关于 SqlServer 批量插入的方式,前段时间也有大神给出了好几种批量插入的方式及对比测试(http://www.cnblogs.com/jiekzou/p/6145550.html),估计大家也 ... 
随机推荐
- Android 链接 手机有关问题及解决方案
			我出现的问题: 这是我百度的解决方案: 
- BSGS-BabyStepGiantStep算法+拓展
			学习数学真是一件赛艇的事. BSGS名字听起来非常有意思,力拔山兮气盖世,北上广深,小步大步...算法其实更有意思,它是用来求解一个方程的 A^x ≡ B (mod P) 是不是特别眼熟,有几个式子长 ... 
- <aop:aspectj-autoproxy />
			通过配置织入@Aspectj切面 虽然可以通过编程的方式织入切面,但是一般情况下,我们还是使用spring的配置自动完成创建代理织入切面的工作. 通过aop命名空间的<aop:aspectj-a ... 
- DataGridView 单击赋值
			void dataGridView1_Click(object sender, EventArgs e) { M_int_judge = ; btnSave.Enabled = true; btnSa ... 
- day002 计算机基础之 操作系统和编程语言的分类
			      今天主要针对计算机基础中的操作系统和编程语言的分类进行了讲解. 操作系统   ... 
- [转]理解和配置 Linux 下的 OOM Killer
			最近有位 VPS 客户抱怨 MySQL 无缘无故挂掉,还有位客户抱怨 VPS 经常死机,登陆到终端看了一下,都是常见的 Out of memory 问题.这通常是因为某时刻应用程序大量请求内存导致系统 ... 
- springcloud(一):初识springcloud
			研究了一段时间Spring Boot了准备向Spring Cloud进发,公司架构和项目也全面拥抱了Spring Cloud.在使用了一段时间后发现Spring Cloud从技术架构上降低了对大型系统 ... 
- 阿里云oss用做文件存储工具类
			package com.fsk.fsksystem.util; import java.io.IOException; import java.io.InputStream; import java. ... 
- Netty学习总结(3)——Netty百万级推送服务
			1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ... 
- mongodb--入门知识点
			命令 mongo.exe,命令行客户端Shell工具. mongod.exe,数据库服务程序. mongodump.exe,数据库备份程序. mongoexport.exe,数据导出工具. mongo ... 
