`
LJ你是唯一LT
  • 浏览: 243524 次
社区版块
存档分类
最新评论

oracle插入大量数据

阅读更多
oracle插入大量数据

1.生成大量的随机测试数据
create table mytest as 
select rownum as id, 
               to_char(sysdate + rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss') as ins_time, 
               trunc(dbms_random.value(0, 100)) as random_id, 
               dbms_random.string('x', 20) random_string 
          from dual 
        connect by level <= 10000; 
 
SQL> col RANDOM_STRING for a30
SQL> select * from mytest where ROWNUM <5;

ID INS_TIME                 RANDOM_ID RANDOM_STRING
---------- ------------------- ---------- ------------------------------
1 2015-12-23 16:37:49        31       DFJXXVY82FH5FZBLRQGG
2 2015-12-23 16:37:50        54       PJXQG3QNYI3K7NXTCQS2
3 2015-12-23 16:37:51        86       B3RWA8H1VH3683WMNLUH
4 2015-12-23 16:37:52        34       MN438B2ETLSJBLT57IY7

1、利用Oracle特有的“connect by”树形连接语法生成测试记录,“level <= 10”表示要生成10记录;
2、利用rownum虚拟列生成递增的整数数据;
3、利用sysdate函数加一些简单运算来生成日期数据,本例中是每条记录的时间加1秒;
4、利用dbms_random.value函数生成随机的数值型数据,本例中是生成0到100之间的随机整数;
5、利用dbms_random.string函数生成随机的字符型数据,本例中是生成长度为20的随机字符串,字符串中可以包括字符或数字。

create table ta as
select  rownum as id, dbms_random.string ('x', 20) name  from dual  connect by level <= 100000; 

SQL> col name for a30
SQL>select * from ta where rownum<10

ID NAME
---------- ------------------------------
1 DLM4OQ0RDZ6HNHKTJTDG
2 BA1TCAPE5WT1O03TKKKE
3 4A4W1JBJHFCOUQIQWCIU
4 MTT1Z9B8247N3HCDTDDU
5 Q22ZNBSLCLN7EEG4JF44
6 NJ7KXP1N3VKNELT95LMC
7 VYFGIORNXHHHWKFOR4NQ
8 7C8R7HGKZ3GEEKK67Z7V
9 6I50G0C6PH0DYV32GW0I

9 rows selected.

2.如何快速插入:
SQL> set timing on
SQL> create table tb(id int,name varchar2(20));
SQL> insert into tb select * from ta;
100000 rows created.
Elapsed: 00:00:00.86

使用hint缩短插入时间                                                                                                                                                    
SQL> insert /*+Append*/ into tb select * from ta;
100000 rows created.
Elapsed: 00:00:00.13    

3.如何批量提交:
1)模拟逐行提交效率(ta表有10w行数据,tb表为空)
DECLARE
BEGIN
   FOR cur IN (SELECT * FROM ta) LOOP
     INSERT INTO tb VALUES cur;
     COMMIT;
   END LOOP;
END;
/
PL/SQL procedure successfully completed.

Elapsed: 00:00:16.38   --16s的时间

2)模拟批量提交效率(ta表有10w行数据,tb表为空)
truncate table tb;

DECLARE
  v_count NUMBER;
BEGIN
  FOR cur IN (SELECT * FROM ta) LOOP
    INSERT INTO tb VALUES cur;
    v_count := v_count + 1;
    IF v_count >= 1000 THEN
      COMMIT;
    END IF;
  END LOOP;
  COMMIT;
END;
/

PL/SQL procedure successfully completed.

Elapsed: 00:00:07.89  ---7s的时间

数据量小的时候,差别可能不大,但数据量大的时候,就能明显看到区别了。

3)另一种高速提交的方法(使用游标)
DECLARE
    CURSOR cur IS
      SELECT * FROM ta;
    TYPE rec IS TABLE OF ta%ROWTYPE;
    recs rec;
  BEGIN
    OPEN cur;
    WHILE (TRUE) LOOP
      FETCH cur BULK COLLECT
        INTO recs LIMIT 100;
      FORALL i IN 1 .. recs.COUNT
        INSERT INTO tb VALUES recs (i);
      COMMIT;
      EXIT WHEN cur%NOTFOUND;
    END LOOP;
    CLOSE cur;
  END;
  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.62  ---1s的时间都不要

说明:频繁的COMMIT会引起大量Redo Log的物理I/O,会极大的限制数据库的性能。因此,为提高数据库性能,尽可能的批量提交。
分享到:
评论

相关推荐

    Oracle插入大量数据

    根据给定文件的信息,“Oracle插入大量数据”的主题围绕着几种有效的策略展开,旨在提升Oracle数据库在大数据量场景下的性能表现。 ### 高速存储设备的应用 首先提及的是采用高速的存储设备来提升读写能力。EMC和...

    oracle批量插入测试数据

    数据库做数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入,那会浪费大量的时间,本文介绍了Oracle中如何通过一条 SQL快速生成大量的测试数据的方法。 产生测试数据的SQL如下...

    java批量插入Oracle数据方法

    通过优化这一过程,可以显著提升应用程序的性能,特别是在处理大量数据时。以下是对“java批量插入Oracle数据方法”的深入解析,包括代码示例及其背后的原理。 ### 一、Java批量插入Oracle数据方法概览 在Java中,...

    oracle 批量插入数据存储过程

    oracle 批量插入数据存储过程。亲测好用。支持 plsql ,toad,等数据库分析软件。主要包括变量的定义,循环及游标的使用等, 亲测好用

    oracle SQL 语句插入数据

    此方法将大量数据一次性加载到PL/SQL表变量中,然后逐条插入。 七、文件导入 在实际操作中,可能需要从外部文件(如`.sql`文件)导入数据。比如`ts_code_20110316.sql`和`ts_msg_20110316.sql`这样的文件,通常包含...

    向Oracle数据库插入Clob大段文本解决方法

    - 考虑到性能和效率,对于大量数据的插入或更新操作,可以采用批处理方式,一次执行多条记录的操作,减少数据库交互次数,提高整体性能。 总之,向Oracle数据库插入或更新Clob大段文本是一个涉及SQL语句构建、参数...

    批量插入大量数据

    在数据库操作中,批量插入大量数据是常见的性能优化策略,特别是在大数据处理或系统初始化时。批量插入能够显著减少网络通信次数,提升效率,降低数据库事务的开销。本例展示了如何在4秒内高效地插入10万条数据,...

    ORACLE数据库中插入大字段数据的解决方法

    当插入大量相似数据时,使用绑定变量能有效防止SQL语句硬解析,提高执行效率。例如,使用PL/SQL匿名块,将大字段作为参数传递。 4. **使用流接口**: 对于非常大的字段,可以利用Oracle的流API(PLS_INTEGER型...

    C#.NET中如何批量插入大量数据到数据库中

    在C#.NET中批量插入大量数据到数据库是一个常见的任务,特别是在处理诸如从Excel文件导入数据等场景时。这里,我们将探讨如何使用C#.NET高效地完成这个任务,并提供一个简单的示例来说明整个过程。 首先,我们需要...

    Oracle插入随机数

    在Oracle数据库管理中,有时我们需要向数据库表中插入大量的随机数据来进行测试、演示或者数据模拟分析等工作。本篇文章将详细介绍如何利用自定义的Oracle函数来实现这一功能。 #### 自定义Oracle函数 为了实现向...

    批量插入数据到Oracle数据库Demo

    3. **FORALL**:在收集了大量数据后,可以使用FORALL语句一次性将它们插入到数据库中,避免了循环中的单次插入,提高了性能。 4. **绑定变量**:在Oracle中,绑定变量可以用来提高查询性能,减少解析次数。在批量...

    java代码oracle数据库批量插入

    ### Java代码实现Oracle...这种方式相比于逐条插入数据,可以显著提升插入速度,特别是在需要插入大量数据的情况下效果更加明显。同时,通过禁用自动提交和批量处理的方式,减少了网络往返次数,进一步提高了执行效率。

    将EXCEL数据 插入ORACLE数据库

    而Oracle数据库则是一种关系型数据库管理系统,用于存储、管理和检索大量结构化数据。 要将Excel数据导入Oracle,主要有以下几种方法: 1. **使用SQL*Loader**:Oracle的SQL*Loader是批量加载数据的强大工具。你...

    oracle向数据库里插入图片

    在Oracle数据库中插入图片涉及到BLOB(Binary Large Object)数据类型,这是Oracle用来存储大量二进制数据,如图片、音频或视频文件等的一种方式。本文将详细介绍如何在Oracle数据库中插入、查询和管理图片。 首先...

    Oracle 大数据量操作性能优化

    Oracle大数据量操作性能优化是指在处理大量数据时,如何提高 Oracle 数据库的性能。该优化技术涉及到多个方面,包括分区、Direct Insert、并行和排序处理等。 分区是 Oracle 中的一种优化技术,可以将大型表分割成...

    Oracle中如何用一条SQL快速生成10万条测试数据

    在Oracle数据库管理中,生成大量测试数据是进行性能测试、数据建模以及验证查询效率等场景下不可或缺的一环。本文将深入探讨如何利用一条SQL语句在Oracle中快速生成10万条测试数据,这对于数据库管理员和开发人员来...

    Oracle创造测试数据

    5. **第三方工具**:如Data Generator for Oracle,可以生成符合特定模式的大量数据,包括模拟日期、字符串、数字等。 测试数据的质量直接影响到测试的覆盖率和准确性。因此,创建测试数据时应考虑以下几点: - **...

    Excel表的Oracle数据库插入工具

    在处理大量数据时,性能优化显得尤为重要。可以考虑将数据分块读取,或者使用Oracle的批量插入功能。此外,如果Excel文件非常大,还可以考虑先将数据导出为CSV文件,然后通过SQL*Loader等工具快速导入到Oracle数据库...

    mysql-oracle数据同步

    批量同步则是在特定时间点进行一次性的大量数据迁移,比如在业务低峰期。 对于“mysql-oracle数据同步”这个主题,我们可以采用以下几种方法: 1. **使用ETL工具**:Extract, Transform, Load(ETL)工具如...

    oracle插入几千几万条测试实例

    这种方法适用于需要插入大量数据的情况,并且可以通过循环结构灵活控制插入的数据量。 ```sql DECLARE v_index NUMBER := 1; -- 定义变量用于记录当前插入的序号 BEGIN LOOP IF v_index 设置插入的上限为5000条 ...

Global site tag (gtag.js) - Google Analytics