您的当前位置:首页>新品 > 正文

Insert Into select与Select Into哪个更快?数据库中SELECTINTO和SELECTO的区别 环球新动态

来源:CSDN 时间:2023-04-07 11:10:11

在平常数据库操作的时候,我们有时候会遇到表之间数据复制的情况,可能会用到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 BEGINSET @id=@i;IF(@i%2=0)beginset @userName="二狗子";set @remark="SELECT INTO 最快!"endelsebeginset @userName="李四";set @remark="快你妹,INSERT INTO 最快"endINSERT 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 方式去操作了。

标签:

最新新闻:

新闻放送
Top