当前位置: 首页 > 面试题库 >

查询性能差异pl / sql forall插入和普通SQL插入

欧阳昊焱
2023-03-14
问题内容

我们一直在使用临时表在pl / sql存储过程中存储中间结果。谁能说出通过pl / sql进行批量收集插入与普通的SQL插入之间是否存在性能差异。

插入[表名] [选择查询返回大量数据]

或者

[选择返回大量数据的查询]的游标

打开游标

获取游标批量收集到集合

使用FORALL执行插入

以上2个选项中的哪一个更适合插入大量临时数据?


问题答案:

针对您的问题的一些实验数据(Oracle 9.2)

大量收集

DECLARE 
  TYPE t_number_table IS TABLE OF NUMBER;
  v_tab t_number_table;
BEGIN
  SELECT ROWNUM
  BULK COLLECT INTO v_tab
  FROM dual
  CONNECT BY LEVEL < 100000;

  FORALL i IN 1..v_tab.COUNT
    INSERT INTO test VALUES (v_tab(i));
END;
/
-- 2.6 sec

插入

-- test table 
CREATE global TEMPORARY TABLE test (id number)
ON COMMIT preserve ROWS;

BEGIN
  INSERT INTO test
  SELECT ROWNUM FROM dual
  CONNECT BY LEVEL < 100000;
END;
/
-- 1.4 sec

直接路径插入
http://download.oracle.com/docs/cd/B10500_01/server.920/a96524/c21dlins.htm

BEGIN
  INSERT /*+ append */ INTO test
  SELECT ROWNUM FROM dual
  CONNECT BY LEVEL < 100000;
END;
/
-- 1.2 sec


 类似资料:
  • 我必须为每个客户端每秒存储大约250个数值,即每小时大约90万个数字。它可能不会是全天的记录(可能每天5-10个小时),但我会根据客户端ID和读取日期对数据进行分区。最大行长约为22-23M,这仍然是可管理的。无论如何,我的方案看起来像这样: 密钥空间的复制因子为2,仅用于测试,告密者为和。我知道复制因子3更符合生产标准。 接下来,我在公司服务器上创建了一个小型集群,三台裸机虚拟化机器,具有2个C

  • 问题内容: 我是hive的新手,想知道是否有像在SQL中一样将数据插入到hive表中的方法。我想像我的蜂巢中插入我的数据 我已经读过您可以将文件中的数据加载到配置单元表中,也可以将数据从一个表导入到配置单元表中,但是有什么方法可以像在SQL中那样附加数据吗? 问题答案: 自Hive 0.14起,此处的某些答案已过时 https://cwiki.apache.org/confluence/displ

  • 我使用。 我每秒接收15万个请求,并将其插入到具有不同分区键的8个表中。 我的问题是哪种方式更好: 批量插入这些表 一个接一个地插入。 我问这个问题是因为,考虑到我的请求大小(150k),批处理听起来是更好的选择,但是因为所有的表都有不同的分区键,所以批处理显得很昂贵。

  • 问题内容: 我可以在SQL Server 2008的Function中编写插入查询吗?如果尝试,会在函数中收到无效使用副作用运算符’INSERT’的错误。请帮帮我。但我希望它是一个函数,而不是存储过程 问题答案: 从这里引用: 用户定义的函数不能用于修改基表信息。DML语句INSERT,UPDATE和DELETE不能在基表上使用。 因此,您无法在函数中执行INSERT。 您可能想解释为什么不想使用

  • 我是pl/sql编程新手,我需要你的帮助。 我想做个手术。 更具体地说,我有如下表1 对于相同的COL1和COL2/COL3,请检查从COL4中选择不同的值,例如COL1=600、COL2=140/COL3=2和COL2=150/COL3=3返回20和35 并在此表TABLE1中插入行 如果P_FLG1='Y',我在表1中插入。如果P_FLG2='Y',我也在表3等中插入 我正在试着做下面的程序,

  • 问题内容: 我正在向SQLite3数据库中进行大批量插入,并且试图了解我应该期望的性能与实际看到的性能之间的关系。 我的桌子看起来像这样: 和我的插入看起来像这样: 元组列表在哪里。 目前,在一台2008年的Macbook上运行,在数据库中大约有1200万行的情况下,插入行花了我大约16分钟的时间。 这听起来合理吗,还是发生了什么大事? 问题答案: 据我了解,性能不佳的主要原因是浪费时间来执行许多