For any specific table, there can be several access methods for a specific query; index scans using different indexes, table scans, the OR strategy, and reformatting.
This simple query has several choices of access methods:
select * from t1 where c11 > 1000 and c12 < 0
The following abstract plans specify three different access methods:
Use the index i_c11:
(i_scan i_c11 t1)
Use the index i_c12:
(i_scan i_c12 t1)
Do a full table scan:
(t_scan t1)
Do a multi-scan; that is, the union or intersection of several indexes of the table, according to the complex clause (hence the more complex query used in this example):
select * from t1 where (c11 > 1000 or c12 < 0) and (c12 > 1000 or c112 < 0) plan “(m_scan t1)”
Abstract plans can be full plans, specifying all optimizer choices for a query, or can specify a subset of the choices, such as the index to use for a single table in the query, but not the join order for the tables. For example, using a partial abstract plan, you can specify that the query above should use some index and let the optimizer choose between i_c11 and i_c12, but not do a full table scan. The empty parentheses are used in place of the index name:
(i_scan () t1)
In addition, the query could use either 2K or 16K I/O, or be performed in serial or parallel.