`

Oracle 逐条和批量插入数据方式对比

阅读更多


创建测试表

create table base_users

(

  userid         varchar2(16),

  username  varchar2(32),

  passwd      varchar2(16)

)tablespace cat_data;

采用一条一条插入的方式

create or replace procedure insert_data_one_by_one(n in number)

as

    currentId number(16) := 0;

    l_userid varchar2(16);

    l_username varchar2(32);


    sqltext varchar2(256);


begin
    dbms_output.put_line('begin ...' || to_char(current_timestamp, 'HH24:MI:SSxFF'));

    sqltext := 'insert into base_users(userid, username, passwd) values(:userid, :username,' || '111111 )';


    loop
        currentId:=currentId + 1;
        l_userid:= to_char(currentId);
        l_username:= to_char(18600000000 + currentId);

        execute immediate sqltext using l_userid, l_username;
        exit when currentId >= n;
    end loop;
    commit;
    dbms_output.put_line('end commit ...' || to_char(current_timestamp, 'HH24:MI:SSxFF'));
end insert_data_one_by_one;
/

采用批量插入的方式

create or replace procedure insert_data_bulk(n in number)

as

  i int;

  tmp_userid         number;

  tmp_username  number;

  type useridArray is table of varchar2(16) index by binary_integer;

  type usernameArray is table of varchar2(32) index by binary_integer;

  puserid useridArray;

  pusername usernameArray;

begin

  dbms_output.put_line('begin ...' || to_char(current_timestamp, 'HH24:MI:SSxFF'));

  tmp_userid := 1;

  tmp_username := 18600000000;

  for i in 1 .. n loop

    puserid(i) := tmp_userid;

    pusername(i) := tmp_username;

    tmp_userid := tmp_userid + 1;

    tmp_username := tmp_username + 1;

  end loop;

  forall i in 1 ..n

    insert into base_users(userid, username, passwd)

                 values(puserid(i), pusername(i), '111111');

  commit;

  dbms_output.put_line('end ...' || to_char(current_timestamp, 'HH24:MI:SSxFF'));

endinsert_data_bulk;

/

测试1千万条数据的插入

SQL>set serveroutput on

SQL>begin

insert_data_one_by_one(10000000);

end;

/

begin ...22:14:01.572928000
end commit ...22:20:43.911104000





SQL>truncate table base_users;




SQL>begin

insert_data_bulk(10000000);

end;

/

begin ...22:25:31.497810000
end ...22:27:23.801515000
  • 大小: 44.2 KB
分享到:
评论

相关推荐

    对比Oracle数据库中多种导入数据方法

    3. 使用批量INSERT:通过绑定变量(batch binding)的方式,一次插入多行数据,能显著提高导入效率。例如,使用BULK COLLECT INTO语句结合PL/SQL,可以显著减少网络通信和数据库调用次数。 4. SQL*Loader:这是一种...

    Hadoop数据迁移--从Hadoop向Oracle

    例如,可以采用批量插入而不是逐条插入的方式来提高迁移效率,同时减少网络传输的压力。另外,数据迁移过程中可能需要考虑Oracle的事务管理,确保数据的完整性。 在数据迁移完成之后,通常还需要进行数据验证,确保...

    jdbc批量操作数据分析与实例

    对于大量数据的插入操作,通常有两种方法:逐条插入和批量插入。 - **逐条插入**:即每次只插入一条记录。这种方式简单易实现,但当需要插入大量数据时,其性能会明显下降。 - **批量插入**:指一次性提交多条插入...

    批量导入数据,大数据导入

    批量导入可以显著提高效率,避免逐条插入数据的低效。SQL(Structured Query Language)是用于管理关系数据库的标准语言,提供了多种批量导入数据的方法。 1. **使用INSERT语句**:这是最基础的方式,但当数据量大...

    简单的excel导入例子··

    导入数据通常有两种方式:批量导入和逐条插入。批量导入效率更高,适用于大量数据。这通常涉及到创建数据库表结构,匹配Excel列名,并将整个数据范围作为一个数据块读入。Python的pandas库提供了`to_sql`方法,可以...

    Excel导入数据库

    - 使用API:通过编程语言(如Python的pandas库,Java的JDBC API)读取Excel文件,然后逐条插入或批量插入到数据库中。 - 数据转换工具:如ETL(提取、转换、加载)工具,如Alteryx、Pentaho或Informatica,可自动...

    SQL Server转换为MySQL工具

    2. 数据迁移:工具会逐条读取SQL Server中的记录,根据字段映射规则将其转换为符合MySQL数据类型的格式,然后插入到对应的MySQL表中。这一步骤需要注意数据类型不兼容的问题,例如,SQL Server的datetime与MySQL的...

    易语言数据库合并程序

    4. **读取记录并进行比较**:程序会逐条读取源数据库中的记录,并与目标数据库中的对应记录进行比较。比较的内容可能包括记录的主键、字段值等关键信息,以确定是否需要更新或插入新的记录。 5. **数据处理策略**:...

    mysq2oracn.rar_MySQL数据库_Visual_C++_

    7. 性能优化:如果数据量庞大,应考虑批量插入而非单条操作,以提高导入效率。还可以利用Oracle的并行执行特性,通过多线程或多进程并行处理数据。 8. 验证与测试:迁移完成后,对比MySQL和Oracle中的数据,确保...

    Berkeley_DB_参考手册

    - **比较**:对比分析 B+Tree、哈希表、队列和记录号等四种数据结构的优缺点。 - **20.5 Berkeley DB 使用 C++ 实例** - **实例演示**:通过具体的 C++ 代码示例来展示 Berkeley DB 的使用方法。 - **20.6 ...

    python实现一次性封装多条sql语句(begin end)

    为了解决这个问题,作者使用了一个字典`importance_map`来存储每个特征的重要性,并在插入数据时检查是否已存在,如果存在则比较并保留更重要的值。这样避免了使用简单的集合(set)可能导致的重要数据丢失。 此外,...

Global site tag (gtag.js) - Google Analytics