分区索引的建立方式,作用是什么
分区索引分为两种:全局索引、本地索引。 全局索引是一个或多个共同承担索引任务,提高I/O性能 本地索引只承担本地分区表内的索引任务
1.创建4个表空间
SQL> create tablespace tst01 logging datafile '/oracle/app/tst01.dbf' size 100m;
Tablespace created.
SQL> create tablespace tst02 logging datafile '/oracle/app/tst02.dbf' size 100m;
Tablespace created.
SQL> create tablespace tst03 logging datafile '/oracle/app/tst03.dbf' size 100m;
Tablespace created.
SQL> create tablespace tst04 logging datafile '/oracle/app/tst04.dbf' size 100m;
Tablespace created.
2.创建范围分区表
SQL> create table test567 partition by range(object_id) 2 ( 3 partition p1 values less than (10000) tablespace tst01, 4 partition p2 values less than (20000) tablespace tst02, 5 partition p3 values less than (50000) tablespace tst03, 6 partition p4 values less than (maxvalue) tablespace tst04) 7 as select * from dba_objects;
Table created.
3.创建全局分区表索引
SQL> create index idx567 on test567(object_id) 2 global partition by range(object_id) 3 ( 4 partition idx_1 values less than(10000) tablespace tst01, 5 partition idx_2 values less than(25000) tablespace tst02, 6 partition idx_3 values less than(50000) tablespace tst03, 7 partition idx_4 values less than(maxvalue) tablespace tst04);
Index created. 4.效果
SQL> set autotrace traceonly; SQL> select * from test567 where object_id=30001;
| Id | Operation | Name | Rows | Bytes | Cost (%C PU)| Time | Pstart| Pstop |
-------------------------------------------------------------------------------- -------------------------------
| 0 | SELECT STATEMENT | | 1 | 177 | 2 (0)| 00:00:01 | | |
| 1 | PARTITION RANGE SINGLE | | 1 | 177 | 2 (0)| 00:00:01 | 3 | 3 |
| 2 | TABLE ACCESS BY GLOBAL INDEX ROWID| TEST567 | 1 | 177 | 2 (0)| 00:00:01 | 3 | 3 |
|* 3 | INDEX RANGE SCAN | IDX567 | 1 | | 1 (0)| 00:00:01 | 3 | 3 |
--------------------------------------------------------------------------------
Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 4 consistent gets 0 physical reads 0 redo size 1227 bytes sent via SQL*Net to client 385 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed
6.创建本地分区表索引
SQL> create index idx567 on test567(object_id) local;
| Id | Operation | Name | Rows | Bytes | Cost (%CP U)| Time | Pstart| Pstop |
-------------------------------------------------------------------------------- ------------------------------
| 0 | SELECT STATEMENT | | 1 | 177 | 2 ( 0)| 00:00:01 | | |
| 1 | PARTITION RANGE SINGLE | | 1 | 177 | 2 ( 0)| 00:00:01 | 1 | 1 |
| 2 | TABLE ACCESS BY LOCAL INDEX ROWID| TEST567 | 1 | 177 | 2 ( 0)| 00:00:01 | 1 | 1 |
|* 3 | INDEX RANGE SCAN | IDX567 | 1 | | 1 ( 0)| 00:00:01 | 1 | 1 |
--------------------------------------------------------------------------------
Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 4 consistent gets 0 physical reads 0 redo size 1198 bytes sent via SQL*Net to client 385 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed