oracle 大数据插入效率问题

oracle存储过程中涉及到千万级数据的插入工作,需求如下:
从A表中抽取数据到B表,然后从B表中抽取数据到C表,然后冲C表中抽取数据到D表。
这四张表都有索引。我该如何提高效率?
我已经将四个表的LOGGING都是更改为NOLOGGING了。
ALTER TABLE B NOLOGGING;
ALTER TABLE C NOLOGGING;
ALTER TABLE D NOLOGGING;
目前我的实现方式如下:
TRUNCATE TABLE B;
ALTER INDEX IDX_B UNUSUABLE;
INSERT /*+APPEND*/ INTO B SELECT * FROM A;
COMMIT;
ALTER INDEX IDX_B REBUILD NOLOGGING;
--------------------------------------------------------
TRUNCATE TABLE C;
ALTER INDEX IDX_C UNUSABLE;
INSERT /*+APPEND*/ INTO C SELECT * FROM B;
COMMIT;
ALTER INDEX IDX_C REBUILD NOLOGGING;
---------------------------------------------------------
TRUNCATE TABLE D;
ALTER INDEX IDX_D UNUSABLE;
INSERT /*+APPEND*/ INTO D SELECT * FROM C;
COMMIT;
ALTER INDEX IDX_D REBUILD NOLOGGING;
--------------------------------------------------------------
如上的实现方式有问题吗?效率上还是不是很高。表A中是千万级的数据量。
先UNUSABLE再REBUILD与先DROP再CREATE这个有区别吗?
如上的需求,还请高人给予指教如何提高运行的效率。

还有:
select * from mytable t where 1=1 and t.name='abc'
select * from mytable t where t.name='abc'

上面的这两个SQL执行效率有何区别?
如果mytable这个表上面有索引和没有索引两种情况下面,分别执行上述的两个sql语句,查询效率会有何影响?
where 1=1 会使被查询的表中的索引失效吗?

第1个回答  2013-01-24
select * from mytable t where 1=1 and t.name='abc'
select * from mytable t where t.name='abc'

我实例测试了一下,这两句执行效率结果是一样的

对于上面千万数据集我觉得你的方法很好了。
如果说最快的话你只能删除表重建,如:
Create table B as
select * from A
这应该是最快的了。但是不知道是否能符合你的要求追问

我当时也想到dorp掉table然后在create,但是这些table的各个列的都有一些约束。所以这样做会改变表的结构。

追答

如果你纯粹是复制这个表,带所有的Constraint和Index
那何不考虑一下 exp/expdp 与 imp/impdp

如果有权限的话这样是最快的了

第2个回答  2013-01-24
每10000条COMMIT一次

oracle 大数据插入效率问题
select * from mytable t where 1=1 and t.name='abc'select * from mytable t where t.name='abc'我实例测试了一下,这两句执行效率结果是一样的 对于上面千万数据集我觉得你的方法很好了。如果说最快的话你只能删除表重建,如:Create table B as select * from A 这应该是最快的了。...

Oracle 插入大量数据效率问题
插入大数据量的时候,可考虑用 insert \/*append*\/ into 表名 nologging select * from table

oracle 大数据量(100万到1000万条记录)导入谁有高招?满意后追加100分...
建议还是用oralce的exp和imp直接导出再导入吧

如何提高Oracle大数据表Update效率
1.把表上的LOGGING取消 2.把表上的INDEX取消 但是依然很慢,无奈下找到这个:http:\/\/asktom.oracle.com\/pls\/asktom\/f?p=100:11:0:::P11_QUESTION_ID:6407993912330 在这个主题问答里,ORA官方提了一种处理的办法:1.利用CREATE table as select xxxxx的办法来生成一新表T1 2.在T1上创建与目标...

oracle如何提高大数据group by 的效率
-- CREATE TEMPORARY TABLESPACE tempindex tempfile 'filename' SIZE 20G ;-- ALTER USER username TEMPORARY TABLESPACE tempindex;REM PARALLEL_EXECUTION_MESSAGE_SIZE can be increased to improve throughput.REM but need restart instance,and should be same in RAC environment REM this doesn't ...

在oracle中,大数据量情况下,merge是否比cursor 快啊???目前我们存储过程...
可以一句 merge 语句就处理掉的。那么当然优先使用 merge 处理比较好。假如业务逻辑很复杂, 一句 merge 语句无法处理。迫不得已,只能使用 游标处理的。可以尝试使用 BULK COLLECT 看看是否能有一些性能上面的提升 http:\/\/hi.baidu.com\/wangzhiqing999\/blog\/item\/2ea041cc0d4606037e3e6f20.html ...

网上很多人说oracle 11g在处理大数据分页时用rowid比rownum效率快很多...
当根据rowid访问时相当于不经查询直接取数,用rownum必须经过查询(即数据库里有查询动作)。如果已经知道了rowid再去获取数据和通过rownum计数去获取数据,肯定用rowid快。实际上,由于oracle不支持的真正的分页查询,所谓分页,是先把数据从数据库中查询出来,然后再把对应页的数据返回给调用者,剩余的数据...

oracle可以做大数据分析吗
可以。Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。简介 可以说Oracle数据库系统是世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。它是一种高效率的、可靠性好...

oracle中clob类型有一万字的话如何将其转为varchar2?
varchar2作为表字段最长4000,恐怕没法撑得下

OraclePipeLined方式究竟能提升多少性能
结论:1 表函数以嵌套表返回时,是非常耗时与耗内存的;2 PIPELINED方式,能让数据无等待,效率非常高,尤其是应用在Oracle的表函数返回;不受SQL语句类型的限制,都能有很好的性能提升,尤其是在大数据量的情况下:1) select * from table(表函数())2)还是select count(*) from table(表函数()) ...

相似回答