Abstract plans can be full plans, describing all query processing steps and options, or they can be partial plans. A partial plan might specify that an index is to be used for the scan of a particular table, without specifying the index name or the join order for the query. For example:
select t1.c11, t2.c21 from t1, t2, t3 where t1.c11 = t2.c21 and t1.c11 = t3.c31
The full abstract plan includes:
The join type, either nl_g_join for nested-loop joins, or m_g_join for merge joins. The plan for this query specifies a nested-loop join.
The join order, included in the nl_g_join clause.
The type of scan, t_scan for table scan or i_scan for index scan.
The name of the index chosen for the tables that are accessed via an index scan.
The scan properties: the parallel degree, I/O size, and cache strategy for each table in the query.
The abstract plan for the query above specifies the join order, the access method for each table in the query, and the scan properties for each table:
( nl_g_join ( t_scan t2 ) ( i_scan t1_c11_ix t1 ) ( i_scan t3_c31_ix t3 ) ) ( prop t3 ( parallel 1 ) ( prefetch 16 ) ( lru ) ) ( prop t1 ( parallel 1 ) ( prefetch 16 ) ( lru ) ) ( prop t2 ( parallel 1 ) ( prefetch 16 ) ( lru ) )
Chapter 18, “Abstract Plan Language Reference,” provides a reference to the abstract plan language and syntax.