EXPLAIN PLAN WHEN USING PARTITIONS

上一篇 / 下一篇  2008-01-15 00:30:22 / 个人分类:performance tuning

EXPLAIN PLAN WHEN USING PARTITIONS

Table partitions yield different outputs for their EXPLAIN PLANs (as shown in the following listing).Here, we create a table with three partitions and a partitioned index. Broadly speaking, partitions are tables stored in multiple places in the database. For more information on partitioning tables

 

SQL> create table dept1(deptno number(2), dept_name varchar2(30))

 2 partition by range(deptno)

 3 (partition d1 values less than (10),

 4  partition d2 values less than (20),

 5  partition d3 values less than (maxvalue));

 

Table created.

 

SQL> insert into dept1 values(1,'dept1');

 

1 row created.

 

SQL> insert into dept1 values(7,'dept7');

 

1 row created.

 

SQL> insert into dept1 values(10,'dept10');

 

1 row created.

 

SQL> insert into dept1 values(15,'dept15');

 

1 row created.

 

SQL> insert into dept1 values(22,'dept22');

 

1 row created.

 

SQL> commit;

 

Commit complete.

 

SQL> create index dept_index on dept1(deptno)

 2 local

 3 (partition d1,

 4  partition d2,

 5  partition d3);

 

Index created.

 

SQL>

 

We now generate an EXPLAIN PLAN that forces a full table scan to access the first two partitions.

 

SQL> explain plan for

 2     select * from dept1

 3      where deptno||''=1

 4         or deptno||''=15;

 

Explained.

 

 

SQL> select * from table(dbms_xplan.display());

 

PLAN_TABLE_OUTPUT

------------------------------------------------------------------------------------------------------------------------------------------------------

Plan hash value: 2415070041

 

---------------------------------------------------------------------------------------------

| Id | Operation          | Name | Rows | Bytes | Cost (%CPU)| Time    | Pstart| Pstop |

---------------------------------------------------------------------------------------------

|  0 | SELECT STATEMENT   |      |    2 |   60 |    2  (0)| 00:00:01 |      |      |

|  1 | PARTITION RANGE ALL|      |    2 |   60 |    2  (0)| 00:00:01 |    1 |    3 |

|* 2 |  TABLE ACCESS FULL | DEPT1 |    2 |   60 |    2  (0)| 00:00:01 |    1 |    3 |

-----

 

SQL>

 

The preceding examples shows that a full table scan on the DEPT1 table is performed. All three partitions are scanned. The starting partition is 1 and the ending partition is 3.

 

Next, an EXPLAIN plan is generated in the following listing for an index range scan of partition2 only(ensure that you delete from the plan table to clear it).

 

explain plan for

   select * from dept1

    where deptno=1;

 

We now generate an EXPLAIN PLAN for an index range scan accessing only the second partition:

 

-----------------------------------------------------------------------------------------------------------------

| Id | Operation                         | Name      | Rows | Bytes | Cost (%CPU)| Time    | Pstart| Pstop |

-----------------------------------------------------------------------------------------------------------------

|  0 | SELECT STATEMENT                  |           |    1 |   30 |    3  (0)| 00:00:01 |      |      |

|  1 | PARTITIONRANGESINGLE           |           |    1 |   30 |    3  (0)| 00:00:01 |    1 |    1 |

|  2 |  TABLE ACCESS BY LOCAL INDEX ROWID| DEPT1     |    1 |   30 |    3  (0)| 00:00:01 |    1 |    1 |

|* 3 |   INDEX RANGE SCAN               | DEPT_INDEX |    1 |      |    2  (0)| 00:00:01 |    1 |    1 |

 

 

This output shows that the only partition of the table OR index that is accessed is the second partition. This is because the value for deptno=1 is within the second partition of the DEPT1 table.

The DEPTNO column is also indexes, and this value is also within the second partition of the index.

 

TIPPartition can also be viewed by the EXPLAIN PLAN by accessing the columns PARTITION_STOP and PARTITION_START in the PLAN_TABLE table.


TAG: explain

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-01-26  
  12345
6789101112
13141516171819
20212223242526
2728293031  

数据统计

  • 访问量: 84
  • 日志数: 634
  • 建立时间: 2007-12-21
  • 更新时间: 2008-01-21

RSS订阅

Open Toolbar