SQL Server 海量数据导入的最快方法

2016-02-19 10:33 20 1 收藏

下面图老师小编要跟大家分享SQL Server 海量数据导入的最快方法,简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!

【 tulaoshi.com - 编程语言 】

最近做某项目的数据库分析,要实现对海量数据的导入问题,就是最多把200万条数据一次导入sqlserver中,如果使用普通的insert语句进行写出的话,恐怕没个把小时完不成任务,先是考虑使用bcp,但这是基于命令行的,对用户来说友好性太差,实际不大可能使用;最后决定使用BULK INSERT语句实现,BULK INSERT也可以实现大数据量的导入,而且可以通过编程实现,界面可以做的非常友好,它的速度也很高:导入100万条数据不到20秒中,在速度上恐怕无出其右者。
但是使用这种方式也有它的几个缺点:
1.需要独占接受数据的表
2.会产生大量的日志
3.从中取数据的文件有格式限制
但相对于它的速度来说,这些缺点都是可以克服的,而且你如果愿意牺牲一点速度的话,还可以做更精确的控制,甚至可以控制每一行的插入。
对与产生占用大量空间的日志的情况,我们可以采取在导入前动态更改数据库的日志方式为大容量日志记录恢复模式,这样就不会记录日志了,导入结束后再恢复原来的数据库日志记录方式。
具体的一个语句我们可以这样写: 
代码如下:

alter database taxi
set RECOVERY BULK_LOGGED
BULK INSERT taxi..detail FROM 'e:out.txt'
WITH ( 
DATAFILETYPE = 'char', 
FIELDTERMINATOR = ',', 
ROWTERMINATOR = 'n',
TABLOCK
)
alter database taxi
set RECOVERY FULL

这个语句将从e:out.txt导出数据文件到数据库taxi的detail表中。

来源:http://www.tulaoshi.com/n/20160219/1595014.html

延伸阅读
最近有个朋友问我,他说他在SQLSERVER删除几百万到几千万数据是显的很慢,帮他分析了一下,提了一些以下意见,或许对很多人有用。     如果你的硬盘空间小,并且不想设置数据库的日志为最小(因为希望其他正常的日志希望仍然记录),而且对速度要求比较高,并清除所有的数据建议你用turncate table1,因为truncate ...
* 说明:复制表(只复制结构,源表名:a 新表名:b)       select * into b from a where 11     * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b)       insert into b(a, b, ...
标签: MySQL mysql数据库
因工作需要,要将存放在sql server数据库中的数据全部导入到mysql数据库中,在网上搜集相关资料,找到两种方法,现在分别谈谈对他们的看法。 第一种是安装mysql ODBC,利用sql server的导出功能,选择mysql数据源,进行数据的直接导出,这种方法很简便,但是针对实际应用有很多弊端,最主要体现就是数据类型问题,首先,sql server数据库中 的n...
标签: SQLServer
在我们工作中,经常需要将保存在文件中的数据导入到SQL Serve的表中。有时可能需要同时从相同或不相同的文件目录中导入多个文件的数据到SQL Server中。这里我们将讨论如何使用批处理文件和DTS从一个特定的文件目录中,导入多个文件的数据到SQLServer中。      试验环境 我们先创建整个试验的环境。创...
标签: SQLServer
  问:怎样才能将XML文件导入SQL Server 2000? 答:将XML文件导入SQL Server有若干种方法,这里提供其中的3种: 大容量装载COM接口。如果需要将文档的实体和属性析取到关系表中,最快的方法就是使用SQL Server 2000 Extensible Markup Language 3.0 Service Pack 1(SQLXML 3.0 SP1)提供的大容量装载COM接口。大容量状态COM接口包含...

经验教程

904

收藏

34
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部