Oracle 数据库不同的数据处理方式与数据库的性能有着很大的关系。 目前Oracle 数据库有如下四种处理方式。
https://www.cndba.cn/dave/article/4361
处理少量数据时使用:
1.Row by row 逐行:
这种方式使用一个线程/进程,一次处理一行数据,适用于OLTP中很少量数据的处理。https://www.cndba.cn/dave/article/4361
https://www.cndba.cn/dave/article/4361https://www.cndba.cn/dave/article/4361
2.Arrays 数组:
这种方式也是使用一个线程/进程进行处理,但是一次处理一组数据,比row by row的效率要高很多,在OLTP场景中,能用Arrays方式就用arrays 的方法。
关于arrays的测试,在之前的博客有说明,参考:
Oracle arraysize 和 fetch size 参数 与 性能优化 说明
https://www.cndba.cn/Dave/article/1533
https://www.cndba.cn/dave/article/4361
在使用SQL*Plus实可以设置SET ARRAYSIZE,如果是Java应用,可以通过设置Connection.SetdefaultRowPrefetch(n)来实现。 https://www.cndba.cn/dave/article/4361
处理大量数据时使用:
3.Manual Parallelism 手动并行
该方法实施起来有点复杂,同时在多线程上平均分配工作负载也是个很大的挑战,而且多线程对数据库对象执行相同的操作时也可能出现争用问题。
4.Set based processing 基于集合的处理
该方法可以使用SQL 定义结果,是数据库里处理数据最高效的方法,在处理大量数据时,能用set based的方法就要用set based的方法。
1.它是按组或行集来处理数据。
2.使用SQL定义结果,让数据库决定怎么去执行。
3.以集合为单位,数据库可以高效的处理数据。 这种方式将数据直接在数据库内部处理,不需要在网络上进行移动,同时可以使用Hash joins、并行查询和DML,从而可以高效的处理数据。
https://www.cndba.cn/dave/article/4361https://www.cndba.cn/dave/article/4361
常见的set based 的SQL 操作如下:
create table as select
insert /*+ append */ select
intersect
minus
exists
not exists
windows functions
multi-table inserts
outer joins
Oracle 官方手册对set 操作也有说明,如下:
版权声明:本文为博主原创文章,未经博主允许不得转载。