C#高效新增数据到数据库(十万级别测试)
- 我们在对数据库进行新增数据时,怎么能把速度提到最快,时间缩到最短呢?下面针对三种方法进行比较
- 新增
- 逐条新增数据模式
Stopwatch s2 = new Stopwatch();
s2.Start();
for (int i = ; i < ; i++)
{ //方法一36s-37s这样的时间结果36192 40860 37434
string sql = "insert into student (Name,Sex,BirthDate) values('张三','男','2019-03-29')";
CreateSql(sql);
}
s2.Stop();
textBox7.Text = s2.ElapsedMilliseconds.ToString();逐条逐步骤新增,共累计增加十万条,结束,得到结果是在36秒左右时间新增完成十万条数据。
- 这种办法,虽然有连接池在提高了一定效率,但是很慢
- 拼接模式新增数据
Stopwatch s = new Stopwatch();
s.Start();
StringBuilder sBuilder = new StringBuilder();
for (int i = ; i < ; i++)
{
sBuilder.Append("insert into student (Name,Sex,BirthDate) values('张三','男','2019-03-29');");
}
s.Stop();
CreateSql(sBuilder.ToString());
textBox6.Text = s.ElapsedMilliseconds.ToString();用StringBuilder拼接十万个sql字符串,在交给插入代码执行,十万条总耗时约27秒-28秒,可见虽然比逐条插入快了约十秒,但是效果还不是很理想
- 高效插入模式SqlBulkCopy
Stopwatch s = new Stopwatch();
s.Start();
DataTable dt = new DataTable();
dt.TableName = "Student";
dt.Columns.Add("ID");
dt.Columns.Add("Name");
dt.Columns.Add("Sex");
dt.Columns.Add("BirthDate");
DataRow dr = null;
for (int i = ; i <; i++)
{
dr = dt.NewRow();
dr["ID"] = i;
dr["Name"] = "张三";
dr["Sex"] = "男";
dr["BirthDate"] = "2019-03-29";
dt.Rows.Add(dr);
}
CreateSql(dt);
s.Stop();
textBox7.Text = s.ElapsedMilliseconds.ToString();先拼接DataTable,然后动态创建十万行DataRow,这样DataTable就组成了数据源,直接使用SqlBulkCopy来插入数据,此时十万条数据新增只需要1.1秒-1.3秒左右,速度很快了。
- SqlBulkCopy代码:
private void CreateSql(DataTable dt)
{
using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=123456;DataBase=student_micc"))
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
SqlBulkCopy sqlCopy = new SqlBulkCopy(conn);
sqlCopy.BatchSize = dt.Rows.Count;
sqlCopy.DestinationTableName = "Student";
sqlCopy.WriteToServer(dt);
sqlCopy.Close();
}
}普通Ado.Net连接串插入
private void CreateSql(string sql)
{
using (SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=123456;DataBase=student_micc"))
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.CommandTimeout = ;
cmd.ExecuteNonQuery();
}
}
}
C#高效新增数据到数据库(十万级别测试)的更多相关文章
- SSM Mybatis将新增数据写入数据库时出现的500状态码:Error updating database.的可能
关于maven下ssm整合的项目推荐这篇博客:https://www.cnblogs.com/yiye/p/5969157.html 今日在ssm下的将新增数据写回数据库时遇到不少的问题,现作记录 如 ...
- mysql数据库千万级别数据的查询优化和分页测试
原文地址:原创 mysql数据库千万级别数据的查询优化和分页测试作者:于堡舰 本文为本人最近利用几个小时才分析总结出的原创文章,希望大家转载,但是要注明出处 http://blog.sina.com. ...
- 在Oracle中快速创建一张百万级别的表,一张十万级别的表 并修改两表中1%的数据 全部运行时间66秒
万以下小表做性能优化没有多大意义,因此我需要创建大表: 创建大表有三种方法,一种是insert into table selec..connect by.的方式,它最快但是数据要么是连续值,要么是随机 ...
- Django之同时新增数据到两个数据库表与同时返回两个表的数据(插拔式)
models:比如有以下三个模型 from django.db import models """ 基类,其他类继承即可获得对应的字段 """ ...
- .Net批量插入数据到SQLServer数据库,System.Data.SqlClient.SqlBulkCopy类批量插入大数据到数据库
批量的的数据导入数据库中,尽量少的访问数据库,高性能的对数据库进行存储. 采用SqlBulkCopy来处理存储数据.SqlBulkCopy存储大批量的数据非常的高效,将内存中的数据表直接的一次性的存储 ...
- Mysql加锁过程详解(6)-数据库隔离级别(1)
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- mybatis学习之路----mysql批量新增数据
原文:https://blog.csdn.net/xu1916659422/article/details/77971867 接下来两节要探讨的是批量插入和批量更新,因为这两种操作在企业中也经常用到. ...
- springmvc 事务控制与数据库隔离级别
springmvc 事物传播与数据库隔离控制 http://www.cnblogs.com/yangy608/archive/2011/06/29/2093478.html 一.Propagation ...
- SQL SERVER 2008 数据库隔离级别代码演示
SQL SERVER 2008 数据库隔离级别代码演示 个隔离级别(其实这是SQL 工业标) 种隔离级别,本身没有优劣之分,完全取决于应用的场景. 本质上,他们是在 隔离性(紊乱程度) 和 灵活性 ...
随机推荐
- centos7下查看tomcat是否启动/系统日志等
centos7下查看tomcat是否启动/系统日志等 方法一: 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown ...
- swipe.js 使用方法
1.插件要求的css样式: <style> .swipe { overflow: hidden; visibility: hidden; position: relative; } .sw ...
- jmeter 调用jar包 本地加密
1.因为加密接口是有我们自己加密方式,所有加密包由开发提供,获得加密包后方式jmeter目录/lib/ext文件夹中 2.选择引入加密包 3.添加BeanShell Sampler和Debug Sam ...
- HDU1301&&POJ1251 Jungle Roads 2017-04-12 23:27 40人阅读 评论(0) 收藏
Jungle Roads Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25993 Accepted: 12181 De ...
- 咏南中间件+开发框架支持最新的DELPHI 10.2 TOKYO
咏南中间件+开发框架支持最新的DELPHI 10.2 TOKYO 价格十分优惠.有意者请向本人索取演示程序! 你只需花一套中间件的价格,就可获得:中间件,CS开发框架一套(赠送),BS开发框架一套(赠 ...
- [51单片机] nRF24L01 无线模块 串口法命令 通过无线控制另一个的灯
>_<!概述: 这是在上一个的基础上通过按键发送4种不同命令来控制接收端的LED灯亮的改进版(上一个:http://www.cnblogs.com/zjutlitao/p/3840013. ...
- SQL Server Job
1. SQL Server Job创建:(SQL Server 代理 - 作业)鼠标右键.新建作业. 2.[常规]选项:定义作业名称.和说明信息. 3:[步骤]选项:新建步骤 4:定义步骤名称.设置对 ...
- C#中的类
C#编程语言,从本质上讲是一组类型声明.所以,本人认为第一个要区分的点是:类型!=类. 当然,如果想要系统的学习C#还是应该先了解一下.Net框架,本文目的只是从相对宏观的角度讲清楚C#中的类.关于类 ...
- 字节码执行方式--解释执行和JIT
此文已由作者赵计刚薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.两种执行方式: 解释执行(运行期解释字节码并执行) 强制使用该模式:-Xint 编译为机器码执行(将字 ...
- AHOI2012 信号塔 | 最小圆覆盖模板
题目链接:戳我 最小圆覆盖. 1.枚举第一个点,考虑当前圆是否包含了这个点,如果没有,则把圆变成以这个点为圆心,半径为0的圆. 2.枚举第二个点,考虑圆是否包含了这个点,如果没有,则把圆变成以这两个点 ...