GVKun编程网logo

哪个更快:多个单 INSERT 或一个多行 INSERT?(多条insert怎么执行)

10

如果您对哪个更快:多个单INSERT或一个多行INSERT?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于哪个更快:多个单INSERT或一个多行INSERT?的详细内容,我

如果您对哪个更快:多个单 INSERT 或一个多行 INSERT?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于哪个更快:多个单 INSERT 或一个多行 INSERT?的详细内容,我们还将为您解答多条insert怎么执行的相关问题,并且为您提供关于c – 使用back_inserter()或inserter()提高std :: copy()的效率、DB2sql——insert all与insert first用法讲解与实例、hive insert into语句 和 insert overwrite语句、Hive之insert和insert overwrite的有价值信息。

本文目录一览:

哪个更快:多个单 INSERT 或一个多行 INSERT?(多条insert怎么执行)

哪个更快:多个单 INSERT 或一个多行 INSERT?(多条insert怎么执行)

我正在尝试优化将数据插入 MySQL 的代码的一部分。我应该链接 INSERT 以制作一个巨大的多行 INSERT 还是多个单独的 INSERT 更快?

答案1

小编典典

https://dev.mysql.com/doc/refman/8.0/en/insert-
optimization.html

插入一行所需的时间由以下因素决定,其中数字表示近似比例:

  • 连接:(3)
  • 向服务器发送查询:(2)
  • 解析查询:(2)
  • 插入行:(1×行大小)
  • 插入索引:(1×索引数)
  • 结束: (1)

由此可见,发送一个大语句将为您节省每个插入语句 7 的开销,在进一步阅读文本时还说:

如果您同时从同一个客户端插入多行,请使用带有多个 VALUES 列表的 INSERT 语句一次插入多行。这比使用单独的单行 INSERT
语句要快得多(在某些情况下快很多倍)。

c – 使用back_inserter()或inserter()提高std :: copy()的效率

c – 使用back_inserter()或inserter()提高std :: copy()的效率

back_inserter和insert_iterator非常方便,但它们也非常低效!

例如,当你附加字符时,在复制时每个元素都会产生大量开销,而在许多情况下,实际上并不需要.

有没有办法让它们更有效率?

解决方法

是的,您可以定义一个新版本的std :: copy,它可以劫持可优化的调用.

总结

以上是小编为你收集整理的c – 使用back_inserter()或inserter()提高std :: copy()的效率全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

DB2sql——insert all与insert first用法讲解与实例

DB2sql——insert all与insert first用法讲解与实例

1、建测试表 
 

    CREATE TABLE EDW_INT   
    (   
      AGMT_NO         VARCHAR2(40 BYTE)             NOT NULL,   
      AGMT_SUB_NO     VARCHAR2(4 BYTE)              NOT NULL,   
      NEED_REPAY_INT  NUMBER(22,2),   
      CURR_PERIOD     NUMBER(4)                     NOT NULL   
    );   
    CREATE TABLE EDW_INT_1   
    (   
      AGMT_NO         VARCHAR2(40 BYTE)             NOT NULL,   
      AGMT_SUB_NO     VARCHAR2(4 BYTE)              NOT NULL,   
      NEED_REPAY_INT  NUMBER(22,2),   
      CURR_PERIOD     NUMBER(4)                     NOT NULL   
    );   
    CREATE TABLE EDW_INT_2   
    (   
      AGMT_NO         VARCHAR2(40 BYTE)             NOT NULL,   
      AGMT_SUB_NO     VARCHAR2(4 BYTE)              NOT NULL,   
      NEED_REPAY_INT  NUMBER(22,2),   
      CURR_PERIOD     NUMBER(4)                     NOT NULL   
    );  


2、插入测试数据 
 

    INSERT INTO EDW_INT   
      (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)   
    VALUES   
      (''20003874'', ''2104'', 3126.5, 7);   
    INSERT INTO EDW_INT   
      (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)   
    VALUES   
      (''20003874'', ''2104'', 3290.76, 6);   
    INSERT INTO EDW_INT   
      (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)   
    VALUES   
      (''20003874'', ''2104'', 3454.06, 5);   
    INSERT INTO EDW_INT   
      (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)   
    VALUES   
      (''20003874'', ''2104'', 3616.41, 4);   
    INSERT INTO EDW_INT   
      (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)   
    VALUES   
      (''20017143'', ''2104'', 2350.86, 0);   
    INSERT INTO EDW_INT   
      (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)   
    VALUES   
      (''20017143'', ''2104'', 3566.55, 0);   
    INSERT INTO EDW_INT   
      (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)   
    VALUES   
      (''20018273'', ''2104'', 1639.46, 0);   
    INSERT INTO EDW_INT   
      (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)   
    VALUES   
      (''20018273'', ''2104'', 2080.49, 0);   
    COMMIT;  


3insert all/first语句示例

(1)、insert all-不带条件 
 

    insert all   
    into edw_int_1(agmt_no,agmt_sub_no,need_repay_int,curr_period)   
    values(agmt_no,agmt_sub_no,need_repay_int,curr_period)   
    into edw_int_2(agmt_no,agmt_sub_no,curr_period)   
    values(agmt_no,''1234'',curr_period)   
    select agmt_no,agmt_sub_no,need_repay_int,curr_period from edw_int;   
    commit;  


(2)、insert all-带条件 
 

    insert all   
    when curr_period=0 then    
    into edw_int_1(agmt_no,agmt_sub_no,need_repay_int,curr_period)   
    values(agmt_no,agmt_sub_no,need_repay_int,curr_period)   
    else  
    into edw_int_2(agmt_no,agmt_sub_no,need_repay_int,curr_period)   
    values(agmt_no,agmt_sub_no,need_repay_int,curr_period)   
    select agmt_no,agmt_sub_no,need_repay_int,curr_period from edw_int;   
    commit;  


(3)、insert first-带条件 
 

    insert first   
    when curr_period=0 then    
    into edw_int_1(agmt_no,agmt_sub_no,need_repay_int,curr_period)   
    values(agmt_no,agmt_sub_no,need_repay_int,curr_period)   
    when agmt_sub_no=''2104'' then   
    into edw_int_2(agmt_no,agmt_sub_no,need_repay_int,curr_period)   
    values(agmt_no,agmt_sub_no,need_repay_int,curr_period)   
    select agmt_no,agmt_sub_no,need_repay_int,curr_period from edw_int;   
    commit;  


4、数据结果查看 
 

    truncate table edw_int_1;   
    truncate table edw_int_2;   
    select * from edw_int;   
    select * from edw_int_1;   
    select * from edw_int_2;  


5、all与first的区别

all:不考虑先后关系,只要满足条件,就全部插入;

first:考虑先后关系,如果有数据满足第一个when条件又满足第二个when条件,则执行第一个then插入语句,第二个then就不插入第一个then已经插入过的数据了。

其区别也可描述为,all只要满足条件,可能会作重复插入;first首先要满足条件,然后筛选,不做重复插入。

 

hive insert into语句 和 insert overwrite语句

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插入,不做重复性校验;


Hive之insert和insert overwrite

Hive之insert和insert overwrite

1. hive 表及数据准备

建表,并插入初始数据。向表中插入

 
hive> use test;
hive> create table kwang_test (id int, name string); hive> insert into kwang_test values(1,''kwang''); hive> insert into kwang_test values(2,''rzheng''); hive> select * from kwang_test; OK 1 kwang 2 rzheng
 

2. insert into 操作

insert into 语法:

INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]

通过 insert into 语句向 kwang_test 表中插入一条数据,并查询结果。

 
hive> insert into table kwang_test values(3,''kk''); hive> select * from kwang_test; OK 1 kwang 2 rzheng 3 kk
 

3. insert overwrite 操作

insert overwrite 语法:

INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 FROM from_statement;

insert overwrite 标准语法的数据来源是通过 select 语法来插入,但为了方便,直接插入 values。通过 insert overwrite 语句向 kwang_test 表中插入一条数据,并查询结果。

hive> insert overwrite table kwang_test values(4,''zz''); hive> select * from kwang_test; OK 4 zz

4. 两者异同

看到上面的现象与结果,基本能够明白 insert into 与insert overwrite 之间的异同,两者都可以向 hive 表中插入数据,但 insert into 操作是以追加的方式向 hive 表尾部追加数据,而 insert overwrite 操作则是直接重写数据,即先删除 hive 表的数据,再执行写入操作。注意,如果 hive 表是分区表的话,insert overwrite 操作只会重写当前分区的数据,不会重写其他分区数据。

今天关于哪个更快:多个单 INSERT 或一个多行 INSERT?多条insert怎么执行的分享就到这里,希望大家有所收获,若想了解更多关于c – 使用back_inserter()或inserter()提高std :: copy()的效率、DB2sql——insert all与insert first用法讲解与实例、hive insert into语句 和 insert overwrite语句、Hive之insert和insert overwrite等相关知识,可以在本站进行查询。

本文标签: