Oracle 插入数据效率对比

oracle插入数据有多种方式:

将从多个表中查出来的数据插入到临时表中

数据行数 5189597

1.传统方式:直接将数据插入到表中

 1 insert into LLB_BASIC_USER_D_TEMP_TEST
 2     select t.serv_id,
 3            t.phone_id,
 4            a1.loc_imei t,
 5            region_code,
 6            t.county_code,
 7            t.payment_mode_cd,
 8            t.plan_id,
 9            t.productflux,
10            t.allflux,
11            t.netuse / 1024 / 1024,
12            t.lj_sn_roam_flux / 1024 / 1024,
13            t.lj_sj_roam_flux / 1024 / 1024,
14            a.llb_jcb,
15            a.llb_jcb_flux,
16            a.llb_bd,
17            a.llb_bd_flux,
18            a.llb_gn,
19            a.llb_gn_flux,
20            a.llb_xs,
21            a.llb_xs_flux,
22            a.llb_xy,
23            a.llb_xy_flux
24       From llb_basic_temp1           t,
25            LLB_BASIC_PACK_ORDER_info a,
26            llb_phone_imei            a1
27      where t.phone_id = a.phone_id(+)
28        and t.phone_id = a1.accs_nbr(+);

耗时41秒

2.用Hint 提示减少操作时间

 1 insert /*+ Append*/ into LLB_BASIC_USER_D_TEMP_TEST
 2     select t.serv_id,
 3            t.phone_id,
 4            a1.loc_imei t,
 5            region_code,
 6            t.county_code,
 7            t.payment_mode_cd,
 8            t.plan_id,
 9            t.productflux,
10            t.allflux,
11            t.netuse / 1024 / 1024,
12            t.lj_sn_roam_flux / 1024 / 1024,
13            t.lj_sj_roam_flux / 1024 / 1024,
14            a.llb_jcb,
15            a.llb_jcb_flux,
16            a.llb_bd,
17            a.llb_bd_flux,
18            a.llb_gn,
19            a.llb_gn_flux,
20            a.llb_xs,
21            a.llb_xs_flux,
22            a.llb_xy,
23            a.llb_xy_flux
24       From llb_basic_temp1           t,
25            LLB_BASIC_PACK_ORDER_info a,
26            llb_phone_imei            a1
27      where t.phone_id = a.phone_id(+)
28        and t.phone_id = a1.accs_nbr(+);

耗时33秒

3.采用不写日志及使用Hint提示减少数据操作的时间

alter table [table_name] nologging;

alter table [table_name] logging;

耗时32秒

对比一下,使用hint提示是时间最快的方式,但是append会锁表,再插入期间不能使用该表。

时间: 2024-08-06 15:42:44

Oracle 插入数据效率对比的相关文章

Android批量插入数据效率对比

1.一个一个插入 /** * 向表中插入数据 * * @param openHelper * @param appInfo * @return */ public static boolean insert(SQLiteOpenHelper openHelper, RemoteAppInfo appInfo) { if (null == appInfo) { return true; } SQLiteDatabase db = null; try { db = openHelper.getWri

LinkedList插入数据效率不一定比ArrayList高,源码分析+实验对比

(一)结论 在尾部插入数据,数据量较小时LinkedList比较快,因为ArrayList要频繁扩容,当数据量大时ArrayList比较快,因为ArrayList扩容是当前容量*1.5,大容量扩容一次就能提供很多空间,当ArrayList不需扩容时效率明显比LinkedList高,因为直接数组元素赋值不需new Node 在首部插入数据,LinkedList较快,因为LinkedList遍历插入位置花费时间很小,而ArrayList需要将原数组所有元素进行一次System.arraycopy 插

JDBC向oracle插入数据

1 public static void main(String[] args) throws SQLException { 2 2 3 3 4 4 String driver="oracle.jdbc.driver.OracleDriver"; 5 5 String url="jdbc:oracle:thin:@www.ee.w.www:1521:orcl"; 6 6 String user="rrr"; 7 7 String password

oracle 插入数据前判断表中是否存储重复数据

有时候用oracle的数据库,插入数据的时候需要判断一下该条数据是否已经存在. 我们的第一思路如下,首先执行下面这个sql: select count(*) isExists from t_test_lll: 然后判断isExists等于0与否,如果等于0,则执行insert. 上面这样写,也可以,但是多写很多代码,不利于后期维护. 其实oracle可以内置在insert语句中进行判断,如下sql: insert when (not exists (select 1 from t_test_ll

oracle插入数据

插入数据的方法有多种,这里简单介绍三种 1.常规插入数据 select * from emp;---已scott.emp表为例 ----按照values插入数据insert into emp (empno,ename ,job,mgr, hiredate , sal ,comm, deptno) values (1122,'steve','工人',2233,to_date('2017-01-03','YYYY-MM-DD'),3000,500,20); ----当插入表中所有的列时,列名可以不写

oracle插入数据问题

这个是我的表结构:desc T_STUDENT;Name         Type         Nullable Default Comments ------------ ------------ -------- ------- -------- stu_id       VARCHAR2(10)                           stu_name     VARCHAR2(40)                           stu_password VARCH

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 var

oracle插入数据时解决和旧数据id的冲突

我们在使用oracle创建一个主键的时候需要让他自增, 但是他跟mysql不同,需要创建序列,具体看下面: 可以删除之前创建的sequence,我们在重新创建一个: DROP SEQUENCE SJGXQK_sequence; --删除 create sequence SJGXQK_sequence  --( SJGXQK_sequence,这个代表的是你的序列的名称)INCREMENT BY 1 -- 每次加几个START WITH 1 -- 从1开始计数NOMAXVALUE -- 不设置最大

业余时间尝试Oracle插入数据

第一种:begin for r1 in 1..3000000 loop insert into oracle_study(id,name) values(r1,'abc'|| r1); commit; end loop; End; 35分钟57秒(2157.182秒):插入3000000条 每秒1390.7032条 第二种:INSERT INTO ORA_STUDY SELECT * FROM ORACLE_STUDY; COMMIT; 613.662秒:插入3000000条 每秒4888.68