Sql Server 大数量插入方法简单汇总
标签:
sql
server
数量
| 发表时间:2011-09-08 18:21 | 作者:HorsonJin ddtd
出处:http://www.cnblogs.com/
文/金延涛
问题
在某些场景下,可能需要在短时间内向数据库中插入大量数据,数据来源可能是性能非常高的实时数据库或者文件,然后转换为关系数据库中的内容,这就要求关系数据库具有非常高的写入性能。
解决办法
解决办法1:在默认情况下,Sql Server把每一次写入当做一个事物处理,在大数据量写入的情况下,每一次写入的事物处理需要耗费非常多的性能和时间,如果插入10w条记录,使用10w次insert语句,在普通pc上30秒钟都无法完成,如果仅启用一次事物,然后做10W次insert操作,仅需要短短的1秒钟就可以完成。
解决办法2:使用SqlBulkCopy,使用SqlBulkCopy可以在大数据量转移时在很大程度上提高性能,使用该类的ColumnMappings属性可以建立源表和目标表的映射关系,实例代码如下:
string connectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;
SqlConnection myConnection = new SqlConnection(connectionString);
SqlCommand myCommand = new SqlCommand("SELECT * FROM Person", myConnection);
myConnection.Open();
SqlDataReader dr = myCommand.ExecuteReader();
SqlConnection myNewConnection = new SqlConnection(connectionString);
myNewConnection.Open();
SqlBulkCopy bulk = new SqlBulkCopy(myNewConnection);
bulk.DestinationTableName = "[Person2]";
bulk.ColumnMappings.Add("Name", "LastName");
bulk.ColumnMappings.Add("Email", "Email");
bulk.ColumnMappings.Add("Picture", "Picture");
try
{
bulk.WriteToServer(dr);
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
finally
{
myNewConnection.Close();
dr.Close();
myConnection.Close();
bulk.Close();
}
小结
相信海量数据插入方面,还有更多更好的方法,因为遇到了相关问题,草草收集了一些简单的处理方法,后续还会补充更新中,希望各位网友也不吝赐教了。
作者: HorsonJin 发表于 2011-09-08 18:21 原文链接
最新新闻:
· Google 应对甲骨文可能失利 & One more thing(2011-09-08 18:05)
· 巴茨任职期15 瞬间 :裁员 爆粗口 拒绝售股(2011-09-08 17:34)
· Ruby作者松本行弘将推出针对移动计算的Ruby分支(2011-09-08 17:30)
· Xbox 360名列8月美国畅销游戏机第一(2011-09-08 17:22)
· 巴茨在雅虎犯下的八大错误(2011-09-08 16:08)
编辑推荐:用ASP.NET写自己的服务框架
相关 [sql server 数量] 推荐:
1,概念: 数据库索引是对数据表中一个或多个列的值进行排序的结构,就像一本书的目录一样,索引提供了在行中快速查询特定行的能力.. 2.1优点: 1,大大加快搜索数据的速度,这是引入索引的主要原因.. 2,创建唯一性索引,保证数据库表中每一行数据的唯一性..
SQL Server 面试
- - SQL - 编程语言 - ITeye博客在SQL语言中,一个SELECT…FROM…WHERE语句称为一个查询块,将一个查询块嵌套在另一个查询块的WHERE子句中的查询称为子查询. 子查询分为嵌套子查询和相关子查询两种. 嵌套子查询的求解方法是由里向外处理,即每个子查询在其上一级查询处理之前求解,子查询的结果作为其父查询的查询条件. 子查询只执行一次,且可以单独执行;.
Sql Server 大数量插入方法简单汇总
- ddtd - 博客园-首页原创精华区 在某些场景下,可能需要在短时间内向数据库中插入大量数据,数据来源可能是性能非常高的实时数据库或者文件,然后转换为关系数据库中的内容,这就要求关系数据库具有非常高的写入性能. 解决办法1:在默认情况下,Sql Server把每一次写入当做一个事物处理,在大数据量写入的情况下,每一次写入的事物处理需要耗费非常多的性能和时间,如果插入10w条记录,使用10w次insert语句,在普通pc上30秒钟都无法完成,如果仅启用一次事物,然后做10W次insert操作,仅需要短短的1秒钟就可以完成.
SQL Server优化50法
- - CSDN博客推荐文章虽然查询速度慢的原因很多,但是如果通过一定的优化,也可以使查询问题得到一定程度的解决. 查询速度慢的原因很多,常见如下几种:没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷). I/O吞吐量小,形成了瓶颈效应. 没有创建计算列导致查询不优化. 内存不足网络速度慢查询出的数据量过大(可以采用多次查询,其他的方法降低数据量).
SQL Server 中的事务
- - CSDN博客推荐文章 事务要有非常明确的开始和结束点,SQL Server 中的每一条数据操作语句,例如SELECT、INSERT、UPDATE和DELETE都是隐式事务的一部分. 即使只有一条语句,系统也会把这条语句当做一个事务,要么执行所有的语句,要么什么都不执行. 事务开始之后,事务所有的操作都会写到事务日志中,写到日志中的事务,一般有两种:一是针对数据的操作,例如插入、修改和删除,这些操作的对象是大量的数据;另一种是针对任务的操作,例如创建索引.
SQL Server优化50法
- - CSDN博客数据库推荐文章 虽然查询速度慢的原因很多,但是如果通过一定的优化,也可以使查询问题得到一定程度的解决. 查询速度慢的原因很多,常见如下几种:. 没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷). I/O吞吐量小,形成了瓶颈效应. 查询出的数据量过大(可以采用多次查询,其他的方法降低数据量).
SQL Server 查询步骤 - pursuer.chen
- - 博客园_首页标签:SQL SERVER/MSSQL SERVER/数据库/DBA/查询步骤. 查询步骤是很基础也挺重要的一部分,但是我还是在周围发现有些人虽然会语法,但是对于其中的步骤不是很清楚,这里就来分解一下其中的步骤,在技术内幕系列里面都会有讲到. TOP于ORDER BY的关系. INSERT INTO Customers VALUES(1,'深圳'),(2,'广州'),(3,'武汉'),(4,'上海'),(5,'北京').
sql server复灾 你懂了吗?
- brett80 - 博客园-首页原创精华区很多时候我们不小心错误delete了一下,或者update一下怎么办,或者直接把数据库删除了,怎么办呢,是不是就一定没有办法呢. 下面让我来教大家我现学现卖的两招. 做之前我们要设置数据库恢复模式:. 首先我们创建一个表:插入几条数据. 我们现在有五条数据了,我们对数据做一个备份. 做任何差异备份,和日志之前,一定要做一个完整备份.
监控 SQL Server 的运行状况
- Bloger - 博客园-首页原创精华区Microsoft SQL Server 2005 提供了一些工具来监控数据库. 动态管理视图 (DMV) 和动态管理函数 (DMF) 返回的服务器状态信息可用于监控服务器实例的运行状况、诊断问题和优化性能. 常规服务器动态管理对象包括:. dm_db_*:数据库和数据库对象. dm_exec_*:执行用户代码和关联的连接.
SQL Server 数据库巡检脚本
- - CSDN博客数据库推荐文章select '现在没有阻塞和死锁信息' as message. select '引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10)) + '进程号,其执行的SQL语法如下'. select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下'.