最近几天加班做了几次大量的数据处理,总结了几个经验,以备下次使用:
1. COMMIT的效率
根据经验,每条INSERT(UPDATE)进行COMMIT和所有INSERT(UPDATE)一起COMMIT,将是没有效率的。需要适当的分块进行COMMIT
2. INSERT的效率
根据试验,如果进行一个大表(10个字段以上)的INSERT大量数据,如果是先一次性INSERT插入主键和其它相同值的字段,然后再用UPDATE来更新其它不同值的字段的做法会比一次直接插入所有值的INSERT快,能节约3/2的时间。
3. 大量INSERT前表的处理
如果一次的插入大量的数据(比如几百万),并且原先的表就有大量的数据,请先把表重建,然后导回原来的数据后再进行插入。这样的效率差是比较大的(1000条的数据在没有重建表前时候1.2秒,重建后只需要0.08秒)。并且在重建表后可以先停止索引和触发器,等INSERT完后再打开。
4. 将多表联合查询的结果进行INSERT的效率
多表联合查询的数据,如果直接INSERT是最没有效率的,而且容易出错(会提示RBS不足,但我查询了应该够的,这里需要再查查资料)。我的做法是将多表查询的结果分别放入几个临时表(临时表可以这几个字段,需要的主键和必要字段,其它字段可以INSERT后UPDATE),然后分别执行进行同步插入。这种拐弯间接做法反而比直接插入快(原因还要学习研究 =。=#)
5. SQLLOAD的INSERT做法
据经验,如果大的SELECT 然后 INSERT,可以先SELECT 出文本(SPOOL),然后用SQLLOAD来 INSERT,这样效率快很多。(需要进一步研究)
6. 大量数据挖掘的表分区操作--学习中。。。
7. DBMS_RAND.VALUE(low,high) DBMS_RANDOM.VALUE(LOW,HIGH) ,在SYS用户下,目录是RDBMS,随机取数
8. 在一个INSERT中设置自动COMMIT的问题。找资料中