1、单条SQL语句一次性的执行数据处理数据库
2、采用游标一条一条的逐步循环处理服务器
3、采用Oracle的BULK COLLECT程序批量处理性能
通常性的原则是:测试
若是能够经过单条SQL实现,并且单条SQL语句的数据处理量不是很是庞大,则采用单条SQL一次性执行的方法是最好的,由于这时打开数据库的次数和处理数据的次数都最少,操做简单并且性能良好,那么,这个数据量如何把握呢,最好的办法是尝试,看看在当前数据库服务器资源肯定状况下,多少数据执行起来效率最好,经验上来说,数万条数据用单条SQL都是没有问题的,超过了10万,就须要斟酌是否会消耗过多内存或者是回滚段。spa
采用游标逐条处理数据的方法,是在单条SQL语句没法实现数据处理状况下的最经常使用方法,在没必要要经过批处理来提升性能的状况下,咱们没有必要摒弃这种方法,而所有使用批处理。那么,在什么状况下使用批处理,如何使用呢内存
1、在使用批处理效果很好时再使用它资源
有几层含义,首先,咱们要在处理的数据量比较庞大,使用批处理能够提升性能的状况下才使用,至少,这个庞大的数据,是要数万行以上的;其次,批量处理,也包含分批份量的意思,由于批量,并不意味着更多就表示更好,应该尽可能作到平衡,咱们能够结合数据库的内存等资源状况,测试了解系统的吞吐量,若是一次处理50条数据,一次处理200条数据以及一次处理500条数据等几种状况相比,一次处理200条数据的性能最好,说明咱们的系统在批次处理200条数据的资源耗用时达到良好平衡。table
2、在使用ETL数据处理的状况下,推荐使用ast
批量处理的一种主要应用是ETL数据处理,能够经过BULK COLLECT批量实现数据的抽取,转换和装载操做,即便这时须要增长稍多一些的代码,从提升性能和资源耗费等方面来说,也是很是值得的,此时数据库会生成更少的重作数据,产生更少的内部锁,于是节省ETL操做的时间。效率
forall:
forall i in 1..100--指明循环器的上限和下限
insert into table_name()values();
forall i in indices of row_num_tab--引用特定集合中单个元素的下标
insert into table_name()values();