博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Insert Into select 与 Select Into 哪个更快?
阅读量:7226 次
发布时间:2019-06-29

本文共 1805 字,大约阅读时间需要 6 分钟。

在平常数据库操作的时候,我们有时候会遇到表之间数据复制的情况,可能会用到INSERT INTO SELECT 或者 SELECT INTO ;

那么二者语法上有什么区别?性能上又如何呢?

围绕着这两个问题,今天就来总结对比下:

一:语法区别

1: INSERT INTO SELECT  的语法

INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。

如果两个表的结构一致,字段类型一致:

INSERT INTO table2SELECT * FROM table1;

如果两个表结构不一致,只有某几列一致:

INSERT INTO table2 (column_name)SELECT column_name FROM table1;

2:SELECT INTO 的语法

SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。

如果想要复制所有的列:

SELECT *INTO newtableFROM table1;

如果想要复制部分的列:

SELECT column_nameINTO newtableFROM table1;

提示:新表将会使用 SELECT 语句中定义的列名称和类型进行创建。如果想要修改字段的名称,可以使用 AS 子句来应用新名称。

 

二:性能区别

----创建一个基础数据库CREATE TABLE TestDataTable(	id int not null,	userName varchar(20),	remark varchar(100))----填充100W测试数据DECLARE @id INT,@userName NVARCHAR(50),@remark NVARCHAR(50);DECLARE @i INT;SET @id=0;SET @userName ='';SET @remark='';SET @i=0;WHILE @i<1000000 BEGIN	SET @id=@i;	IF(@i%2=0)		begin			set @userName='二狗子';			set @remark='SELECT INTO 最快!'		end	else		begin			set @userName='李四';			set @remark='快你妹,INSERT INTO 最快'		end	INSERT INTO TestDataTable(id,username,remark)	VALUES (@id,@username,@remark ) 	SET @i=@i+1END --查询填充后的数据SELECT * FROM TestDataTable --删除表结构以及数据【慎用】DROP Table TestDataTable

  耗时1分钟58秒,数据填充好了,真是不给力,竟然用了快2分钟;

好了,在去创建一个目标数据库;

--创建一个目标数据库,把100W数据复制到这个里面取CREATE TABLE TargetDB(	id int not null,	userName varchar(20),	remark varchar(100))

测试1:INSERT INTO SELECT

SET STATISTICS TIME ONINSERT INTO TargetDBSELECT *FROM TestDataTableGOSET STATISTICS TIME OFF

 

 

测试2:SELECT INTO

SET STATISTICS TIME ONSELECT *INTO TargetDBFROM TestDataTableGOSET STATISTICS TIME OFF

 

三:结论

经过上面的对比,可以看出SELECT INTO 的性能要比INSERT INTO 快出不少;

虽然SELECT INTO 数据的导入速度有很大优势,但是也有不好的地方,就是此语句只能在目标表没有创建的情况下使用,如果目标表结构已经存在,就会提示数据库中已存在名为 'TargetDB' 的对象(如下图),此时就只能用INSERT INTO SELECT 方式去操作了。

 

转载于:https://www.cnblogs.com/Rawls/p/10732135.html

你可能感兴趣的文章
CLR存储过程
查看>>
初级运维(一)
查看>>
C语言字符串常用函数学习(一)
查看>>
Lync Server 2010部署与应用(三)---拓扑生成与发布
查看>>
安全摘记1:关于安全与黑客
查看>>
我的友情链接
查看>>
tbox中vector容器的使用
查看>>
一个简单的PHP笔试题
查看>>
firebug重新载入页面获取源码
查看>>
我的友情链接
查看>>
5月末周中国.COM总量净增1.2万个 美国净减2.6万个
查看>>
Elasticsearch数据建模-关联查询
查看>>
我的友情链接
查看>>
CentOS 下安装 Lnmp
查看>>
redis系列:通过日志案例学习string命令
查看>>
世界冠军之路:菜鸟车辆路径规划求解引擎研发历程
查看>>
Linux-sendmail
查看>>
关于BSTR的困惑
查看>>
什么时候使用HashMap?它有什么特点?
查看>>
框架名
查看>>