本篇文章给大家谈谈mssqlinsertinto和insertintoselect性能比较,以及insertinto和select连用的知识点,同时本文还将给你拓展hiveinsertinto语句和i
本篇文章给大家谈谈mssql insert into 和insert into select性能比较,以及insert into和select连用的知识点,同时本文还将给你拓展hive insert into 语句 和 insert overwrite 语句、Insert Into select 与 Select Into 哪个更快?、INSERT INTO SELECT 很慢,但 INSERT 或 SELECT 在单独运行时很快、insert into select(insert 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 在单独运行时很快
- insert into select(insert select)和select into from语句
mssql insert into 和insert into select性能比较(insert into和select连用)
使用insert into table(field, ...)values(value, ...),insert into table(field, ...)values(value, ...)...的情况
使用insert into table(field, ...)select(value,...) union all select(value,...) union all select(value,...) ...的情况
我一次插入的数据是:1190条。用insert into所用的时间在510毫秒上下徘徊,而用insert into select所用的时间在16毫秒上下徘徊。
- 数据库插入数据之select into from与insert into select区别详解
- insert into select和select into的使用和区别介绍
- 解析MySQL中INSERT INTO SELECT的使用
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句简单介绍
- INSERT INTO SELECT语句与SELECT INTO FROM语句的一些区别
- insert select与select into 的用法使用说明
- select into 和 insert into select 两种表复制语句
- insert into tbl() select * from tb2中加入多个条件
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解(SQL数据库和Oracle数据库的区别)
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 在单独运行时很快
如何解决INSERT INTO SELECT 很慢,但 INSERT 或 SELECT 在单独运行时很快
我有一个这样的 sql:
INSERT INTO table1 (column1,column2) (
SELECT column3,column4 FROM table2 WHERE column5 = ''value''
);
-
table1
有 3,500,000 行。 -
table2
有 900,000 行。 -
SELECT column3,column4 FROM table2 WHERE column5 = ''value''
返回 NO 寄存器(零),耗时约 0.004 秒。 -
INSERT INTO table1 (column1,column2) VALUES (''value'',''value'')
也需要大约 0.004 秒。
但是当我在 INSERT INTO SELECT
语句中组合两者时,如上所示,大约需要 7.7 秒。有解释吗?有解决办法吗?
解决方法
有时使用 SELECT 执行 INSERT 时性能较慢,因为原始表中的字段类型与 de 命运表中的字段类型不同,因此当执行 INSERT-SELECT 时,对来自 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
关于mssql insert into 和insert into select性能比较和insert into和select连用的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于hive insert into 语句 和 insert overwrite 语句、Insert Into select 与 Select Into 哪个更快?、INSERT INTO SELECT 很慢,但 INSERT 或 SELECT 在单独运行时很快、insert into select(insert select)和select into from语句等相关知识的信息别忘了在本站进行查找喔。
本文标签: