oracle存储过程中调用数据避免不了子查询与中间表,此时可以使用子查询因子化来提高效率。
with temp as (select ... from ... ),
temp2 as (select ... from temp)
select ... from temp2;
其中with后面可以加HINT,inline适用于一次性临时查询,但是在业务繁忙时效率会降低;
materrialize适用于多次查询,产生物化视图,占用存储。
中间表清表时用truncate降低高水位线,然后parallel和append一起使用插入来提高效率。
如果权限足够可以开并行,alter table/session ... enable parallel dml。
此处仅是最实用的写法,拿来直接用,具体原理和测试还需要自己查更详细的的资料。