I'm trying to improve a query and I only have a vague understanding of the explain plan. This query has very large joins and many tables. One of the improvements I tried out was breaking all the join down into smaller sub-queries and groups so that it could take advantage of joining smaller datasets as much as possible (still not complete it's a very large query). The basics structure is
select a.attr1, a..attr2, b.attr1, b.attr2, c.attr1, c.attr2, c.attr3 ...
from (select a1.attr1, a2.attr2 from tablea1 a1 join tablea2 a2 on a1.attr1 = a2.attr1) a
left outer join (select b1.attr1, b2.attr2 from tableb1 b1 join tableb2 b2 on b1.attr1 = b2.attr1)
left outer join (select c1.attr1, c2.attr2, c3.attr3 from tablec1 c1 join tablec2 c2 on c1.attr1 = c2.attr1 join tablec3 c3 on c1.attr1 = c3.attr1) c
....
When I try an explain plan I notice that there certain steps like joining the results of a to c that go from serial to parallel execution.
I understand from this
http://www.oracle.com/technetwork/articles/database-performance/geist-parallel-execution-1-1872400.html that going from parallel to serial is not desired. But I don't see much documentation from google on how to get it process each step in parallel (in this case tables in the C group).
1. Is going from Serial to Parallel desired or bad?
2. Is there some hints I can give the runner to trigger parallel execution if I can guarantee that all join statements occur on partitioned/indexed columns?