`
baobaojinjin
  • 浏览: 142492 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

插入大量数据时

 
阅读更多

插入大量数据时,尽量不要使用循环,可以使用CTE,如果要使用循环,也放到一个事务中

    这点其实显而易见。SQL Server是隐式事务提交的,所以对于每一个循环中的INSERT,都会作为一个事务提交。这种效率可想而知,但如果将1000条语句放到一个事务中提交,效率无疑会提升不少。

    打个比方,去银行存款,是一次存1000效率高,还是存10次100?下面,根据吉日的要求,补个例子,见代码1.

CREATE TABLE dbo.TestInsert
(
	Number INT PRIMARY KEY
);
--循环插入,不给力,我的笔记本45秒
DECLARE @index INT;
SET @index = 1;

WHILE @index <= 100000
BEGIN
	INSERT dbo.TestInsert(Number) VALUES( @index);
	SET @index = @index + 1;
END



--放到一个事务中循环,略好,但也不是最好,我的笔记本1秒
BEGIN TRAN
DECLARE @index INT;
SET @index = 1;

WHILE @index <= 100000
BEGIN
	INSERT dbo.TestInsert(Number) VALUES( @index);
	SET @index = @index + 1;
END

COMMIT

--批量插入,10W行,显示0秒,有兴趣的同学改成100W行进行测试
INSERT dbo.TestInsert(Number)
	SELECT TOP (100000) rn = ROW_NUMBER() OVER
		(ORDER BY c1.[object_id])
		FROM sys.columns AS c1
		CROSS JOIN sys.columns AS c2
		CROSS JOIN sys.columns AS c3
		ORDER BY c1.[object_id];


--CTE方式,和上面那种方式大同小异,也是批量插入,比如:
WITH cte AS(
	SELECT TOP (100000) rn = ROW_NUMBER() OVER
		(ORDER BY c1.[object_id])
		FROM sys.columns AS c1
		CROSS JOIN sys.columns AS c2
		CROSS JOIN sys.columns AS c3
		ORDER BY c1.[object_id]
)
INSERT dbo.TestInsert(Number) SELECT rn FROM cte
分享到:
评论

相关推荐

    Java向数据库中插入大量数据时的优化

    Java向数据库中插入大量数据时的优化

    批量插入大量数据

    批量插入大量数据,本例子做的是4秒插入10万条数据。里面的时间和过期时间,插入的数据量都可以自己进行设置。

    C#.NET中如何批量插入大量数据到数据库中

    主要给大家介绍C#.net中如何批量插入大量数据到数据库中,本文涉及到C#.net中批量插入数据到数据库中方面的内容,对C#.net批量插入数据到数据库中感兴趣的朋友可以参考下本

    Oracle插入大量数据

    描述了在Oracle中若需要插入大量数据,可以采用的方法。

    利用poi获取excel数据批量插入大量数据到mysql

    该资源主要实现如下功能,利用poi获取excel中大量数据,然后利用jdbc批量插入到mysql

    ASP.net AJAX进度条实例(批量插入大量数据)

    该示例使用简单,完成插入指定数量的数据,ajax写入数据库,并显示精准进度,实时返回运行过程。对于大量插入数据库的操作,可以做到无刷,不超时; 目录结构: Css/style.css -------------进度条样式 Js/...

    大量数据插入 sql语句

    大量数据插入的sql方法,大量数据插入的sql方法,大量数据插入的sql方法

    mysql 大批量插入测试数据

    数据库,大批量插入测试数据,可用于生成随机数据

    C# 批量插入和更新数据

    C# 批量插入和更新数据,这是一个批量操作表的代码文档

    oracle 批量插入数据存储过程

    oracle 批量插入数据存储过程。亲测好用。支持 plsql ,toad,等数据库分析软件。主要包括变量的定义,循环及游标的使用等, 亲测好用

    数据汇总--对大量数据进行汇总

    在数据处理中经常需要对大量数据进行汇总,将相同关键字记录的某些数据项的值叠加起来,生成一个分类汇总表。 假设某超级市场销售有m种商品(假设商品的编号为1,2,3,┅┅,m),有n台前台收款机(假设收款机的...

    支持批量插入的Delphi数据输入程序.rar

    支持批量插入的Delphi数据输入程序,配合数据实现的数据批量输入程序,程序的原型是一个学生管理程序,用来输入学生的基本信息,本程序添加了批量插入数据的功能,可看作是一个批量插入数据的实例吧。相关的代码: ...

    C#SqlBulkcopy批量插入数据

    使用C#自带SqlBulkcopy类,批量插入数据库,与一般insert into 插入效率相比,插入速度一个天一个地,效果很明显。特别用在导入大量数据时。

    CI框架使用phpExcel上传excel文件插入大量数据

    主要完成CI框架中使用PHPexcel上传excel文件,完成插入数据库前完成数据有效性验证、批量插入等功能,四万条的数据已测试,只用了3分多钟的时间,过多的数据就不知道了,有可能会挂掉,数据量大的话最好选择别的方式...

    MySQL大量数据插入各种方法性能分析与比较

    不管是日常业务数据处理中,还是数据库的导入导出,都可能遇到需要处理大量数据的插入。插入的方式和数据库引擎都会对插入速度造成影响,这篇文章旨在从理论和实践上对各种方法进行分析和比较,方便以后应用中插入...

    oracle批量插入测试数据

    数据库做数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入,那会浪费大量的时间,本文介绍了Oracle中如何通过一条 SQL快速生成大量的测试数据的方法。 产生测试数据的SQL如下...

    Oracle表删除大量数据(千万)后查询变慢问题(原因分析)

    Oracle表删除大量数据(千万)后查询变慢问题(原因分析)

    如何高效地向Redis插入大量的数据(推荐)

    最近有个哥们在群里问,有一个日志,里面存的是IP地址(一行一个),如何将这些IP快速导入到Redis中。 我刚开始的建议是Shell+redis客户端。 ... 官方给出的理由如下: Using a normal Redis client to perform mass ...

    C#在MySQL大量数据下的高效读取、写入详解

    最近由于工作的原因,经常需要对海量数据进行处理,做的数据爬虫相关,动辄千万级别的数据,单表几十个G 都是都是家常便饭。 那么主要的开发语言是C#,数据库使用的是MySQL。下面通过这篇文章我们来一起学习学习吧。

Global site tag (gtag.js) - Google Analytics