在本文中,我们将给您介绍关于mssqlinsertinto和insertintoselect性能比较的详细内容,并且为您解答insertinto和select连用的相关问题,此外,我们还将为您提供关于
在本文中,我们将给您介绍关于mssql insert into 和insert into select性能比较的详细内容,并且为您解答insert into和select连用的相关问题,此外,我们还将为您提供关于hive insert into 语句 和 insert overwrite 语句、Insert Into select 与 Select Into 哪个更快?、insert into select(insert select)和select into from语句、INSERT INTO SELECT语句与SELECT INTO FROM语句的一些区别的知识。
本文目录一览:- mssql insert into 和insert into select性能比较(insert into和select连用)
- hive insert into 语句 和 insert overwrite 语句
- Insert Into select 与 Select Into 哪个更快?
- insert into select(insert select)和select into from语句
- INSERT INTO SELECT语句与SELECT INTO FROM语句的一些区别
mssql insert into 和insert into select性能比较(insert into和select连用)
使用insert into table(field,...)values(value,...),insert into table(field,...)...的情况
使用insert into table(field,...)select(value,...) union all select(value,...) union all select(value,...) ...的情况
我一次插入的数据是:1190条。用insert into所用的时间在510毫秒上下徘徊,而用insert into select所用的时间在16毫秒上下徘徊。
hive insert into 语句 和 insert overwrite 语句
1、insert into 语句
hive> insert into table userinfos2 select id,age,name from userinfos;
2、insert overwrite 语句
hive> insert overwrite table userinfos2 select id,age,name from userinfos;
两者的区别:
insert overwrite 会覆盖已经存在的数据,如被覆盖的表中有 3 条数据和要插入的一条数据相同,那么覆盖后只会有一条数据;
insert into 只是简单的 copy 插入,不做重复性校验;
Insert Into select 与 Select Into 哪个更快?
在平常数据库操作的时候,我们有时候会遇到表之间数据复制的情况,可能会用到INSERT INTO SELECT 或者 SELECT INTO ;
那么二者语法上有什么区别?性能上又如何呢?
围绕着这两个问题,今天就来总结对比下:
一:语法区别
1: INSERT INTO SELECT 的语法
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。
如果两个表的结构一致,字段类型一致:
INSERT INTO table2
SELECT * FROM table1;
如果两个表结构不一致,只有某几列一致:
INSERT INTO table2 (column_name)
SELECT column_name FROM table1;
2:SELECT INTO 的语法
SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。
如果想要复制所有的列:
SELECT *
INTO newtable
FROM table1;
如果想要复制部分的列:
SELECT column_name
INTO newtable
FROM 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+1
END
--查询填充后的数据
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 ON
INSERT INTO TargetDB
SELECT *
FROM TestDataTable
GO
SET STATISTICS TIME OFF
测试2:SELECT INTO
SET STATISTICS TIME ON
SELECT *
INTO TargetDB
FROM TestDataTable
GO
SET STATISTICS TIME OFF
三:结论
经过上面的对比,可以看出SELECT INTO 的性能要比INSERT INTO 快出不少;
虽然SELECT INTO 数据的导入速度有很大优势,但是也有不好的地方,就是此语句只能在目标表没有创建的情况下使用,如果目标表结构已经存在,就会提示数据库中已存在名为 ''TargetDB'' 的对象(如下图),此时就只能用INSERT INTO SELECT 方式去操作了。
insert into select(insert select)和select into from语句
1、insert into select(insert select)语句
要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量
语句形式为:
1 Insert into Table2(field1,field2,...) select value1,value2,... from Table1
上面的语句比较适合两个表的数据互插,如果多个表就不适应了。对于多个表,我们可以先将需要查询的字段join起来,然后组成一个视图后再select from就可以了,sql代码如下所示:
1 INSERT INTO a(field1,field2) SELECT * FROM(SELECT f1,f2 FROM b JOIN c) AS tb
实例:
向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“3”课程的同学学号、2号课的平均成绩;
1 Insert score
2 select s.id,''6'',(Select avg(score) from score where course_id=''2'')
3 from student s
4 where s.id not in (Select student_id from score where course_id=''3'');
注意:
(1)要求目标表Table2必须存在,并且字段field,field2…也必须存在
(2)注意Table2的主键约束,如果Table2有主键而且不为空,则 field1, field2…中必须包括主键
(3)注意语法,不要加values,和插入一条数据的sql混了,不要写成:
1 Insert into Table2(field1,field2,...) values (select value1,value2,... from Table1) //错误的写法
由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。
2、select into from 语句
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。示例如下
语句形式为:
1 SELECT vale1, value2 into Table2 from Table1
INSERT INTO SELECT语句与SELECT INTO FROM语句的一些区别
1.INSERT INTO SELECT语句
语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1 要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。示例如下: INSERT INTO SELECT语句复制表数据 create TABLE Table1
(
a varchar(10),
b varchar(10),
c varchar(10),
CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
(
a ASC
)
) ON [PRIMARY] create TABLE Table2
(
a varchar(10),
d int,
CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED
(
a ASC
)
) ON [PRIMARY]
GO
--2.创建测试数据
Insert into Table1 values('赵','asds','90')
Insert into Table1 values('钱','100')
Insert into Table1 values('孙','80')
Insert into Table1 values('李',null)
GO
select * from Table2 --3.INSERT INTO SELECT语句复制表数据
Insert into Table2(a,c,d) select a,5 from Table1
GO --4.显示更新后的结果
select * from Table2
GO
--5.删除测试表
drop TABLE Table1
drop TABLE Table2
2.SELECT INTO FROM语句
语句形式为:SELECT vale1,value2 into Table2 from Table1 要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。示例如下: SELECT INTO FROM创建表并复制表数据create TABLE Table1
(
a varchar(10),
CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
(
a ASC
)
) ON [PRIMARY]
GO --2.创建测试数据
Insert into Table1 values('赵',null)
GO --3.SELECT INTO FROM语句创建表Table2并复制数据
select a,c INTO Table2 from Table1
GO --4.显示更新后的结果
select * from Table2
GO
--5.删除测试表
drop TABLE Table1
drop TABLE Table2