mysql十万条数据_2秒内向数据库中插入十万条数据?
怎么向数据库中快速插入十万条数据呢,当然得需要对比才能看到效果,今天给大家亲身测了两种方法对比,差别25倍左右
1,数据库用sql server 2008 r2,表结构非常简单,四个字段,建数据表的sql代码如下
USE [TestDB]
GO
/****** Object: Table [dbo].[User_1] Script Date: 03/27/2014 00:31:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[User_1]([ID] [int] NULL,[Name] [nvarchar](20) NULL,[sex] [int] NULL,[phone] [nvarchar](20) NULL)ON [PRIMARY]
GO
2,十万条数据从何而来?由于是模拟实现,我就是用模拟数据,拼成一个具有十万条记录的DataTable
publicDataTable GetData()
{
DataTable dt= newDataTable();
dt.Columns.Add("ID", typeof(int));//为新的Datatable添加一个新的列名
dt.Columns.Add("Name", typeof(string));//为新的Datatable添加一个新的列名
dt.Columns.Add("sex", typeof(int));//为新的Datatable添加一个新的列名
dt.Columns.Add("phone", typeof(string));//为新的Datatable添加一个新的列名
for (int i = 0; i < 100000; i++) //开始循环赋值
{
DataRow row= dt.NewRow(); //创建一个行
row["ID"] = i + 1; //从总的Datatable中读取行数据赋值给新的Datatable
row["Name"] = "sxd" + (i + 1).ToString();
row["sex"] = i % 2 == 0 ? 1 : 0;
row["phone"] = (13500000000 + i + 1).ToString();
dt.Rows.Add(row);//添加次行
}returndt;
}
3,用最基本的方法来实现,循环遍历向数据库中插入十万条数据,为了模拟,细节地方没有修改
public static boolMySqlBulkCopy(DataTable Table)
{bool Bool = true;string ConnectionString = "server=localhost;database=10wan;uid=datauser;pwd=1";using (SqlConnection con = newSqlConnection(ConnectionString))
{
con.Open();for (int i = 0; i < Table.Rows.Count; i++)
{
SqlCommand cmd= newSqlCommand();
cmd.Connection=con;
cmd.CommandText= "insert into User_1 (ID,Name,sex,phone) values (" + Table.Rows[i][0] + ",'" + Table.Rows[i][1] + "'," + Table.Rows[i][2] + ",'" + Table.Rows[i][3] + "')";
cmd.ExecuteNonQuery();
}
con.Close();
}returnBool;
}
4,用的是webform做的测试,页面中加了三个控件Label1,2,3,调用下面的方法得出结果
public stringGetTimeSpan()
{
DataTable dt=GetData();
DateTime dt1=DateTime.Now;
Label1.Text=dt1.ToString();
MySqlBulkCopy(dt);
DateTime dt2=DateTime.Now;
Label2.Text=dt2.ToString();
TimeSpan span= dt2 -dt1;string a=span.TotalSeconds.ToString();
Label3.Text=a;returna;
}
5,最后得到的结果截图如下
6,有了上面的结果以后,我们开始用另一种方法,微软自带的SqlBulkCopy,获取十万条数据跟上面的例子一样,这里不再重复,直接用,然后开始拼SqlBulkCopyColumnMapping,代码如下
publicSqlBulkCopyColumnMapping[] GetMapping()
{
SqlBulkCopyColumnMapping[] mapping= new SqlBulkCopyColumnMapping[4];
mapping[0] = new SqlBulkCopyColumnMapping("ID", "ID");
mapping[1] = new SqlBulkCopyColumnMapping("Name", "Name");
mapping[2] = new SqlBulkCopyColumnMapping("sex", "sex");
mapping[3] = new SqlBulkCopyColumnMapping("phone", "phone");returnmapping;
}
7,开始大批量插入数据了,关键地方就在此
///
///DataTable批量添加(有事务)///
/// 数据源
/// 目标表即需要插入数据的数据表名称如"User_1"
public static bool MySqlBulkCopy(DataTable Table, stringDestinationTableName)
{bool Bool = true;string ConnectionString = "server=localhost;database=10wan;uid=datauser;pwd=1";using (SqlConnection con = newSqlConnection(ConnectionString))
{
con.Open();using (SqlTransaction Tran = con.BeginTransaction())//应用事物
{using (SqlBulkCopy Copy = newSqlBulkCopy(con, SqlBulkCopyOptions.KeepIdentity, Tran))
{
Copy.DestinationTableName= DestinationTableName;//指定目标表
SqlBulkCopyColumnMapping[] Mapping = GetMapping();//获取映射关系
if (Mapping != null)
{//如果有数据
foreach (SqlBulkCopyColumnMapping Map inMapping)
{
Copy.ColumnMappings.Add(Map);
}
}try{
Copy.WriteToServer(Table);//批量添加
Tran.Commit();//提交事务
}catch{
Tran.Rollback();//回滚事务
Bool = false;
}
}
}
}returnBool;
}
8,跟上面例子一样,开始调用方法,展现在webform页面上,这里也不再写,直接上图
9,两者的差别是不是很大,这个方法是不是很好用,如果是的话请您点个赞啊,如果有更好的方法请留言,让大家共同学习。
shixudong3@yeah.net
mysql十万条数据_2秒内向数据库中插入十万条数据?相关推荐
- Oracle数据库中插入日期型数据
如果插入Oracle的当前系统时间可以用 SYSDATE INSERT INTO FLOOR VALUES ( SYSDATE ) ; 往Oracle数据库中插入日期型数据(to_date的用法) 今 ...
- mysql 每条记录大小_计算数据库中各个表的数据量和每行记录所占用空间
很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tablespaceinfo ( nameinfo VARCHAR(500) , row ...
- Java程序向MySql数据库中插入的中文数据变成了问号
找到mysql的安装目录,修改my.ini文件 (1)如何找到my.ini文件 如果my.ini文件不在MySQL的安装目录下,可能放在隐藏目录,要先去找到ProgramData,(这里要先打开显示隐 ...
- Mysql查询表中每行数据大小_计算数据库中各个表的数据量和每行记录所占用空间的脚本-转载来自(博客园 桦仔)...
本文出处: 感谢桦仔 的分享精神! 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tablespaceinfo ( nameinfo ...
- JDBC向数据库中插入BLOB类型数据
目录 1.Blob介绍 2.使用PreparedStatement向数据表中插入Blob类型字段 3.从数据表中读取Blob类型数据 4.特殊情况说明 1.Blob介绍 Blob是一种二进制数据文件, ...
- ajax向数据库中添加数据,用jqueryajax在数据库中插入数据
我有一个带有c#(.net4)代码的表单.在这种形式下,用户填写他的规格并提交. 我想在jquery中使用ajax或post方法来预防blink.i写流程代码. "成功"函数执行, ...
- MySQL存个人信息可以吗_mysql数据库中,在修改数据时能否保存操作人员的信息,比如姓名或id,如果能,怎么操作。...
满意答案 yuliuyifei 2015.04.15 采纳率:50% 等级:8 已帮助:464人 您好,"用mysql作为数据库开发" 在数据枝姿访问这一层,必须是mysql ...
- mysql查询最新插入的一条_我刚数据库中插入一条记录,紧接着再去查询却查不到?...
向数据库 中奖记录表中 添加一条中奖 记录,马上调用方法查询这条记录, 查询不到! 我打开数据库查看 数据是插入成功的. 开发语言是用java, 框架 hibernate! 插入数据,和查询数据代码如 ...
- java向Oracle数据库中插入blob字段数据
java不能直接想插入其他普通类型数据一样插入blob字段数据,因为blob相当于一个大文件块,里面有游标,需要初始化blob游标才能插入数据.所以我们要先插入一个空的blob数据,以初始化游标,然后 ...
最新文章
- Centos6.3下利用open***部署远程×××服务
- NeurIPS 2020论文接收大排行!谷歌169篇第一、斯坦福第二、清华国内第一
- Nagios安装部署与Cacti整合文档超精细版本
- 如何处理会话等待事件与ORA-21780故障
- (转)shiro权限框架详解01-权限理论介绍
- 加速ASP.NET Core WEB API应用程序——第1部分
- php 科学计数 位数,PHP采用超长位数字运算防止数字以科学计数法显示的实例
- postgresql null 值 不受查询条件约束
- 查看单元测试用例覆盖率新姿势:IDEA 集成 JaCoCo
- 昆仑通态通用版找不到驱动_昆仑通态无法连接1200
- 3串口多串口双串口以及2串口UART转WiFi多跳通讯实现三
- C++ 虚函数语义学
- [产品经理]产品经理的职责
- 【Paper-Attack】A Targeted Universal Attack on Graph Convolutional Network
- 怎么对注册表中的垃圾文件进行清理?
- SAP HANA中日期格式转换
- 企业管理决策之金字塔思维
- GitHub代码托管
- 英雄传奇-1.专用浏览器问题
- 插入u盘计算机未响应,u盘启动电脑无反应,教您电脑插上U盘后无法启动解决方法...